【发布时间】:2017-01-19 12:48:39
【问题描述】:
我正在尝试合并 PDF 文档并向其中一些文档添加额外的页面。合并部分工作正常,现在我试图弄清楚如何通过将链接传递到预先存在的 PDF 页面来添加额外的页面。如何将 PDF 页面的链接传递给 targetDoc.AddPage(LINK)?
public static void MergePDFs(string targetPath, DataTable pdfs)
{
try
{
using (PdfSharp.Pdf.PdfDocument targetDoc = new PdfSharp.Pdf.PdfDocument())
{
foreach (DataRow pdf in pdfs.Rows)
{
using (PdfSharp.Pdf.PdfDocument pdfDoc = PdfSharp.Pdf.IO.PdfReader.Open(pdf["link"].ToString(), PdfDocumentOpenMode.Import))
{
for (int i = 0; i < pdfDoc.PageCount; i++)
{
targetDoc.AddPage(pdfDoc.Pages[i]);
}
}
}
targetDoc.Save(targetPath);
}
}
catch(Exception ex)
{
Console.Write(ex);
}
}
冲压方式
using (Stream pdfStream = new FileStream(sourceFileName, FileMode.Open))
{
using (Stream newpdfStream = new FileStream(newFileNameWithPath, FileMode.Create, FileAccess.ReadWrite))
{
iTextSharp.text.pdf.PdfReader pdfReader = new iTextSharp.text.pdf.PdfReader(pdfStream);
PdfStamper pdfStamper = new PdfStamper(pdfReader, newpdfStream);
PdfContentByte pdfContentByte = pdfStamper.GetOverContent(pageNumber);
BaseFont baseFont = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1250, BaseFont.NOT_EMBEDDED);
pdfContentByte.SetColorFill(BaseColor.RED);
pdfContentByte.SetFontAndSize(baseFont, 12);
pdfContentByte.BeginText();
pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER, inputText, Convert.ToInt32(xCoordinate), Convert.ToInt32(yCoordinate), 0);
pdfContentByte.EndText();
pdfStamper.Close();
}
}
【问题讨论】:
-
我不确定我的答案是否是您想要的。如果您要解释“将链接传递到预先存在的 pdf 页面”意味着我可能需要更新我的答案。
-
谢谢。我正在尝试将 pdf 页面传递给我的盖章方法,并在盖章后将其添加回来。我在上面添加了我的冲压方法
-
压模使用 iTextSharp。您可以使用 iTextSharp 将加盖页面保存到流中,使用 PDFsharp 打开该页面并像使用任何其他页面一样使用加盖页面。看来您的代码已经将标记的 PDF 保存在
newpdfStream流中,您只需打开该 PdfReader.Open() - 适用于文件和流。