gpt4 book ai didi

c# - 使用 ITextSharp 在 PDF 上绘图,而不创建新的 PDF

转载 作者:太空宇宙 更新时间:2023-11-03 10:30:08 28 4
gpt4 key购买 nike

我尝试使用 ITextSharp 在现有 PDF 上绘制简单的形状(矩形、圆形..),而无需创建新的 PDF。我发现了一篇讨论这个问题的帖子 ( itextsharp modify existing pdf (no new source pdf) and add watermark ),我想知道是否有人可以告诉我更多相关信息。

我的目标是通过在其上添加一个圆圈来修改 pdf,当前的解决方案涉及创建一个新的 PDF (Itextsharp)。是否可以在不创建新圆的情况下在 PDF 上添加圆?谢谢。

J.

最佳答案

您不能同时读取文件和写入文件。想一想 Word 的工作原理:您无法打开 Word 文档并直接向其中写入内容。 Word 总是创建一个临时文件,将更改写入其中,然后用它替换原始文件,然后丢弃临时文件。

你也可以这样做:

  • 使用PdfReader阅读原始文件,
  • PdfStamper 创建一个临时文件,完成后,
  • 用临时文件替换原始文件。

或者:

  • 将原始文件读入byte[],
  • 用这个 byte[] 创建 PdfReader,并且
  • 使用 PdfStamper 的原始文件路径。

第二个选项更危险,因为如果您执行某些操作导致 PdfStamper 出现异常,您将丢失原始文件。

关于使用 PdfStamper 添加内容,请查看免费电子书中标题为“处理现有 PDF”的部分 The Best iText Questions on StackOverflow .您会发现以下问题:

所有这些示例都通过创建一个 PdfContentByte 实例来添加内容,如下所示:

PdfContentByte canvas = stamper.getOverContent(pagenumber);

在页码为pagenumber 的页面上绘制圆圈时需要用到的就是这个canvas。执行此操作时使用正确的坐标很重要。这在这里解释:How to position text relative to page using iText?

更新:

Json在评论中发布了以下代码:

string oldFile = @"C:\Users\ae40394\Desktop\hello.pdf";
string newFile = @"C:\Users\ae40394\Desktop\NEW.pdf";
// creating a reader with the original PDF
PdfReader reader = new PdfReader(oldFile);
Rectangle rect = reader.GetPageSize(1);
FileStream fs = new FileStream(newFile,FileMode.Create);
using (PdfStamper stamper = new PdfStamper(reader, fs)) {
// modify the pdf content
PdfContentByte cb = stamper.GetOverContent(1);
cb.SetColorStroke(iTextSharp.text.BaseColor.GREEN);
cb.SetLineWidth(5f);
cb.Circle(rect.GetLeft() + 30, rect.GetBottom() + 30 ,20f);
cb.Stroke();
}
reader.Close();
File.Replace(@"C:\Users\ae40394\Desktop\NEW.pdf", @"C:\Users\ae40394\Desktop\hello.pdf", @"C:\Users\ae40394\Desktop\hello.pdf.bac");

我稍微修改了代码,因为:

  • 不需要 Document 对象,
  • 关闭using时关闭stamper
  • stamper 关闭时,FileStream 也关闭
  • 圆的坐标是硬编码的。我使用页面大小来确保它们是相对于坐标系的原点制作的,尽管可以肯定的是,您可能还想检查是否有裁剪框。

关于c# - 使用 ITextSharp 在 PDF 上绘图,而不创建新的 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30477484/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com