本文内容未经作者允许不能转发 复制 发表
本文使用ItextSharp 国产化系统下netcore操作PDF
主要解决取出PDF页后在合成 PDF域找不到得问题
我得功能是十个PDF 我需要合成一个PDF 并且取出指定几页PDF 合成一个新得PDF 内容域存在
1)合成PDF
2)回填内容
3)取出想要得页
合成PDF
/// <summary>
/// 多个PDF合成
/// </summary>
/// <param name="Files"></param>
/// <param name="OuntPdfFileName"></param>
public static void RMergePDFFile(List<string> Files, string outMergeFile)
{
FileStream baos = new FileStream(outMergeFile, FileMode.Create, FileAccess.Write);
PdfCopyFields copyFields = new PdfCopyFields(baos);
// int documentnumber = 0;
for (int i = 0; i < Files.Count; i++)
{
PdfReader reader = new PdfReader(Files[i]);
copyFields.AddDocument(reader);
reader.Close();
}
copyFields.Close();
baos.Dispose();
}
内容域回填
CONTENT 为域得key
使用Hashtable能获得PDF得所有域内容
public static void SetPDFCONTENTValue(string strDestTempPath, string strSrcTempPath, string value)
{ // 读取PDF模版文件
FileStream fileStream = new FileStream(strDestTempPath, FileMode.Create);
PdfReader pdfRead = new PdfReader(strSrcTempPath);
PdfStamper stamp = new PdfStamper(pdfRead, fileStream);
AcroFields form = stamp.AcroFields;
Hashtable hash = form.Fields;
BaseFont bfChinese =
BaseFont.CreateFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
form.SetFieldProperty("CONTENT", "textfont", bfChinese/* BaseFont.createFont() */, null);
form.SetField("CONTENT", value);
// stamp.FormFlattening = true;
stamp.Close();
pdfRead.Close();
fileStream.Dispose();
}
删除多余得页数
Selectpages(1,2,3,5,7)能取出 12357页合成新的PDF 域依然存在
/// <summary>
/// 删除多余数据
/// </summary>
/// <param name="fileName"></param>
/// <param name="outfile"></param>
/// <param name="pagenum"></param>
public static void DeletePDFPage(string fileName, string outfile, string pagenum)
{
using (Stream resultPDFOutputStream = new FileStream(outfile, mode: FileMode.Create))
{
// Create a reader from the file bytes.
var reader = new PdfReader(fileName);
reader.SelectPages(pagenum);
PdfStamper pdfStamper = new PdfStamper(reader, resultPDFOutputStream);
pdfStamper.Close();
reader.Close();
}
}
为什么先取出页在合并域得内容就消失了那?
只要使用GetImportedPage PDF页得内容就会被破坏 就这样子
PdfImportedPage page = copy.GetImportedPage(reader, j);
本文介绍了在国产化系统中使用netcore和ItextSharp处理PDF时遇到的问题,即合成PDF后内容域消失。文章详细阐述了如何合成PDF、回填内容以及选择特定页面,并探讨了GetImportedPage方法导致PDF域内容破坏的原因。
1768

被折叠的 条评论
为什么被折叠?



