.NET Framework3.5下ITextSharp合并PDF文本仅点击可见问题求助
问题:合并PDF后文本仅点击才显示(.NET Framework 3.5 + iTextSharp 5.5.13.3)
使用.NET Framework 3.5的遗留代码,基于iTextSharp 5.5.13.3合并PDF文件,合并成功后打开文件,文本仅在点击后才显示,推测是页面方向处理存在问题。目前无法升级框架,已知遗留代码的局限性与潜在安全风险。
有问题的合并代码
public static byte[] CombineFilePDF(List<byte[]> prmPDFs) { Document _objDocument = new Document(); MemoryStream _objMemoryStream = new MemoryStream(); try { PdfWriter _objPdfWriter = PdfWriter.GetInstance(_objDocument, _objMemoryStream); _objDocument.Open(); PdfContentByte _objPdfContentByte = _objPdfWriter.DirectContent; for (int i = 0; i < prmPDFs.Count; i++) { PdfReader _objPdfReader = new PdfReader(prmPDFs[i]); PdfReader.unethicalreading = true; int _numPages = _objPdfReader.NumberOfPages; for (int _currentPage = 1; _currentPage <= _numPages; _currentPage++) { Rectangle _objRectangle = _objPdfReader.GetPageSizeWithRotation(_paginaActual); _objDocument.SetPageSize(_objRectangle); _objDocument.NewPage(); PdfImportedPage _objPdfImportedPage = _objPdfWriter.GetImportedPage(_objPdfReader, _currentPage); int orientation = _objPdfReader.GetPageRotation(_currentPage); if ((orientation == 90) || (orientation == 270)) { _objPdfContentByte.AddTemplate(_objPdfImportedPage, 0, -1f, 1f, 0, 0, _objPdfReader.GetPageSizeWithRotation(_currentPage).Height); } else { _objPdfContentByte.AddTemplate(_objPdfImportedPage, 1f, 0, 0, 1f, 0, 0); } } } } catch (Exception _objException) { throw new Exception(String.Format("Error combining PDFs: {0}", _objException.Message), _objException); } finally { _objDocument.Close(); } return _objMemoryStream.ToArray(); }
测试可用的合并代码
Document _objDocument = new Document(); MemoryStream _objMemoryStream = new MemoryStream(); try { PdfCopy pdf = new PdfCopy(_objDocument, _objMemoryStream); pdf.SetMergeFields(); _objDocument.Open(); foreach (var pdfBytes in prmPDFs) { PdfReader _objPdfReader = new PdfReader(pdfBytes); PdfReader.unethicalreading = true; pdf.AddDocument(_objPdfReader); } } catch (Exception ex) { throw new Exception($"Error combining PDFs: {ex.Message}", ex); } finally { if (_objDocument != null && _objDocument.IsOpen()) { _objDocument.Close(); } if (_objMemoryStream != null) { _objMemoryStream.Flush(); } } return _objMemoryStream.ToArray();
特此求助,盼解答。
内容的提问来源于stack exchange,提问作者LuigiDev
相关产品推荐
相关产品推荐

