diff --git a/apps/mobile/patches/react-native-html-to-pdf-lite+0.9.1.patch b/apps/mobile/patches/react-native-html-to-pdf-lite+0.9.1.patch index b9a6f3abe..ce8865dd1 100644 --- a/apps/mobile/patches/react-native-html-to-pdf-lite+0.9.1.patch +++ b/apps/mobile/patches/react-native-html-to-pdf-lite+0.9.1.patch @@ -1,3 +1,177 @@ +diff --git a/node_modules/react-native-html-to-pdf-lite/android/src/main/java/android/print/PdfConverter.java b/node_modules/react-native-html-to-pdf-lite/android/src/main/java/android/print/PdfConverter.java +index e2b536b..c0c5945 100644 +--- a/node_modules/react-native-html-to-pdf-lite/android/src/main/java/android/print/PdfConverter.java ++++ b/node_modules/react-native-html-to-pdf-lite/android/src/main/java/android/print/PdfConverter.java +@@ -8,6 +8,7 @@ package android.print; + import android.content.Context; + import android.os.Build; + import android.os.Handler; ++import android.os.Looper; + import android.os.ParcelFileDescriptor; + import android.util.Log; + import android.webkit.WebView; +@@ -59,42 +60,55 @@ public class PdfConverter implements Runnable { + + @Override + public void run() { ++ if (mWebView != null) { ++ destroy(); ++ } + mWebView = new WebView(mContext); ++ mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); ++ mWebView.getSettings().setJavaScriptEnabled(true); ++ mWebView.getSettings().setAllowContentAccess(true); ++ mWebView.getSettings().setAllowFileAccess(true); + mWebView.setWebViewClient(new WebViewClient() { + @Override + public void onPageFinished(WebView view, String url) { +- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) +- throw new RuntimeException("call requires API level 19"); +- else { +- PrintDocumentAdapter documentAdapter = mWebView.createPrintDocumentAdapter(); +- documentAdapter.onLayout(null, getPdfPrintAttrs(), null, new PrintDocumentAdapter.LayoutResultCallback() { +- }, null); +- documentAdapter.onWrite(new PageRange[]{PageRange.ALL_PAGES}, getOutputFileDescriptor(), null, new PrintDocumentAdapter.WriteResultCallback() { +- @Override +- public void onWriteFinished(PageRange[] pages) { +- try { +- String base64 = ""; +- if (mShouldEncode) { +- base64 = encodeFromFile(mPdfFile); ++ final Handler handler = new Handler(Looper.getMainLooper()); ++ handler.postDelayed(() -> { ++ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) ++ throw new RuntimeException("call requires API level 19"); ++ else { ++ PrintDocumentAdapter documentAdapter = mWebView.createPrintDocumentAdapter(); ++ documentAdapter.onLayout(null, getPdfPrintAttrs(), null, new PrintDocumentAdapter.LayoutResultCallback() { ++ }, null); ++ documentAdapter.onWrite(new PageRange[]{PageRange.ALL_PAGES}, getOutputFileDescriptor(), null, new PrintDocumentAdapter.WriteResultCallback() { ++ @Override ++ public void onWriteFinished(PageRange[] pages) { ++ try { ++ String base64 = ""; ++ if (mShouldEncode) { ++ base64 = encodeFromFile(mPdfFile); ++ } ++ ++ PDDocument myDocument = PDDocument.load(mPdfFile); ++ int pagesToBePrinted = myDocument.getNumberOfPages(); ++ ++ mResultMap.putString("filePath", mPdfFile.getAbsolutePath()); ++ mResultMap.putString("numberOfPages", String.valueOf(pagesToBePrinted)); ++ mResultMap.putString("base64", base64); ++ mPromise.resolve(mResultMap); ++ } catch (IOException e) { ++ mPromise.reject(e.getMessage()); ++ } finally { ++ handler.postDelayed(() -> { ++ destroy(); ++ }, 1000 * 5000); + } +- +- PDDocument myDocument = PDDocument.load(mPdfFile); +- int pagesToBePrinted = myDocument.getNumberOfPages(); +- +- mResultMap.putString("filePath", mPdfFile.getAbsolutePath()); +- mResultMap.putString("numberOfPages", String.valueOf(pagesToBePrinted)); +- mResultMap.putString("base64", base64); +- mPromise.resolve(mResultMap); +- } catch (IOException e) { +- mPromise.reject(e.getMessage()); +- } finally { +- destroy(); + } +- } +- }); +- } ++ }); ++ } ++ }, 1000 * 2); + } + }); ++ + WebSettings settings = mWebView.getSettings(); + settings.setDefaultTextEncodingName("utf-8"); + mWebView.loadDataWithBaseURL(mBaseURL, mHtmlString, "text/HTML", "utf-8", null); +diff --git a/node_modules/react-native-html-to-pdf-lite/ios/RNHTMLtoPDF/RNHTMLtoPDF.m b/node_modules/react-native-html-to-pdf-lite/ios/RNHTMLtoPDF/RNHTMLtoPDF.m +index e005f2a..5d12d77 100644 +--- a/node_modules/react-native-html-to-pdf-lite/ios/RNHTMLtoPDF/RNHTMLtoPDF.m ++++ b/node_modules/react-native-html-to-pdf-lite/ios/RNHTMLtoPDF/RNHTMLtoPDF.m +@@ -74,7 +74,10 @@ + (BOOL)requiresMainQueueSetup + - (instancetype)init + { + if (self = [super init]) { +- _webView = [[WKWebView alloc] initWithFrame:self.bounds]; ++ ++ WKWebViewConfiguration *wkWebViewConfig = [WKWebViewConfiguration new]; ++ wkWebViewConfig.websiteDataStore = [WKWebsiteDataStore defaultDataStore]; ++ _webView = [[WKWebView alloc] initWithFrame:self.bounds configuration:wkWebViewConfig]; + _webView.navigationDelegate = self; + [self addSubview:_webView]; + autoHeight = false; +@@ -186,36 +189,38 @@ -(void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigati + if (webView.isLoading) + return; + +- UIPrintPageRenderer *render = [[UIPrintPageRenderer alloc] init]; +- [render addPrintFormatter:webView.viewPrintFormatter startingAtPageAtIndex:0]; ++ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ ++ UIPrintPageRenderer *render = [[UIPrintPageRenderer alloc] init]; ++ [render addPrintFormatter:webView.viewPrintFormatter startingAtPageAtIndex:0]; + +- // Define the printableRect and paperRect +- // If the printableRect defines the printable area of the page +- CGRect paperRect = CGRectMake(0, 0, _PDFSize.width, _PDFSize.height); +- CGRect printableRect = CGRectMake(_paddingLeft, _paddingTop, _PDFSize.width-(_paddingLeft + _paddingRight), _PDFSize.height-(_paddingBottom + _paddingTop)); ++ // Define the printableRect and paperRect ++ // If the printableRect defines the printable area of the page ++ CGRect paperRect = CGRectMake(0, 0, _PDFSize.width, _PDFSize.height); ++ CGRect printableRect = CGRectMake(_paddingLeft, _paddingTop, _PDFSize.width-(_paddingLeft + _paddingRight), _PDFSize.height-(_paddingBottom + _paddingTop)); + + +- [render setValue:[NSValue valueWithCGRect:paperRect] forKey:@"paperRect"]; +- [render setValue:[NSValue valueWithCGRect:printableRect] forKey:@"printableRect"]; ++ [render setValue:[NSValue valueWithCGRect:paperRect] forKey:@"paperRect"]; ++ [render setValue:[NSValue valueWithCGRect:printableRect] forKey:@"printableRect"]; + +- NSData * pdfData = [render printToPDF:&_numberOfPages backgroundColor:_bgColor ]; ++ NSData * pdfData = [render printToPDF:&_numberOfPages backgroundColor:_bgColor ]; + +- if (pdfData) { +- NSString *pdfBase64 = @""; ++ if (pdfData) { ++ NSString *pdfBase64 = @""; + +- [pdfData writeToFile:_filePath atomically:YES]; +- if (_base64) { +- pdfBase64 = [pdfData base64EncodedStringWithOptions:0]; ++ [pdfData writeToFile:_filePath atomically:YES]; ++ if (_base64) { ++ pdfBase64 = [pdfData base64EncodedStringWithOptions:0]; ++ } ++ NSDictionary *data = [NSDictionary dictionaryWithObjectsAndKeys: ++ pdfBase64, @"base64", ++ [NSString stringWithFormat: @"%ld", (long)_numberOfPages], @"numberOfPages", ++ _filePath, @"filePath", nil]; ++ _resolveBlock(data); ++ } else { ++ NSError *error; ++ _rejectBlock(RCTErrorUnspecified, nil, RCTErrorWithMessage(error.description)); + } +- NSDictionary *data = [NSDictionary dictionaryWithObjectsAndKeys: +- pdfBase64, @"base64", +- [NSString stringWithFormat: @"%ld", (long)_numberOfPages], @"numberOfPages", +- _filePath, @"filePath", nil]; +- _resolveBlock(data); +- } else { +- NSError *error; +- _rejectBlock(RCTErrorUnspecified, nil, RCTErrorWithMessage(error.description)); +- } ++ }); + } + + @end diff --git a/node_modules/react-native-html-to-pdf-lite/react-native-html-to-pdf.podspec b/node_modules/react-native-html-to-pdf-lite/react-native-html-to-pdf-lite.podspec similarity index 100% rename from node_modules/react-native-html-to-pdf-lite/react-native-html-to-pdf.podspec diff --git a/packages/core/utils/templates/html/builder.js b/packages/core/utils/templates/html/builder.js index 241639e73..12e503352 100644 --- a/packages/core/utils/templates/html/builder.js +++ b/packages/core/utils/templates/html/builder.js @@ -36,27 +36,30 @@ async function preprocessHTML(templateData) { const mathInlines = doc.querySelectorAll(".math-inline.math-node"); if (mathBlocks.length || mathInlines.length) { - const { default: katex } = require("katex"); - require("katex/contrib/mhchem"); - + const katex = require("katex"); + require("katex/contrib/mhchem/mhchem.js"); for (const mathBlock of mathBlocks) { const text = mathBlock.textContent; + console.log(text); mathBlock.innerHTML = katex.renderToString(text, { displayMode: true, - output: "mathml" + throwOnError: false }); } for (const mathInline of mathInlines) { const text = mathInline.textContent; - mathInline.innerHTML = katex.renderToString(text, { output: "mathml" }); + mathInline.innerHTML = katex.renderToString(text, { + throwOnError: false, + displayMode: false + }); } templateData.hasMathBlocks = true; } const codeblocks = doc.querySelectorAll("pre > code"); if (codeblocks.length) { - const { default: prismjs } = require("prismjs"); + const prismjs = require("prismjs"); prismjs.register = () => {}; for (const codeblock of codeblocks) { const language = LANGUAGE_REGEX.exec(