我正在根据用户指定的顺序覆盖pdf文件中的页面。我试图以一种方式设置我的代码,即从文件中选择要保留的页面,将这些页面作为对象存储在内存中,完全覆盖同一文件,然后将这些页面写回到文件中,然后追加为用户需要的。
PdfReader reader = new PdfReader("test.pdf");
reader.SelectPages("1-5"));
PdfStamper stamper = new PdfStamper(reader, new
FileStream("test.pdf", FileMode.Create));
我遇到的问题是PdfStamper无法初始化,因为它要用于写入的文件已经为PdfReader打开。如何将PdfReader中的页面读取到内存中,以便可以将其关闭,然后在清除后写入同一文件?
答案 0 :(得分:0)
要“删除”页面,只需选择要保留的页面:
PdfReader pdfReader = new PdfReader("Pdf_FilePath.pdf")
pdfReader.selectPages("1-3,5-10"); //Now You have pages without page no.4
使用以下命令将更改写入pdf
PdfStamper pdfStamper = new PdfStamper(pdfReader,
new FileOutputStream("Result_Pdf_FilePath.pdf"));
然后关闭Stamper和Reader
pdfStamper.close();
如果要将文件保存在同一路径中,则可以使用tempfile,然后在关闭Reader后复制临时文件并覆盖旧的临时文件,然后删除临时文件。
答案 1 :(得分:0)
我测试了它,效果很好。试试这个:
注意:原始PDF共有4页,而我删除了该页。 我使用了库:“ iTextSharp.LGPLv2.Core”
class Program
{
static void Main(string[] args)
{
string fullName = "C:\\tmp\\pm\\Contract\\_models\\Proposta Saude.pdf";
PDFTest(fullName);
Console.WriteLine("Finish!!");
Console.Read();
}
static private void PDFTest(string fileName)
{
using (Stream resultPDFOutputStream = new FileStream(path: "C:\\tmp\\pm\\Contract\\_models\\Proposta Saude -2.pdf", mode: FileMode.Create))
{
// Create a reader from the file bytes.
var reader = new PdfReader(fileName);
reader.SelectPages("1-2,4");
PdfStamper pdfStamper = new PdfStamper(reader, resultPDFOutputStream);
pdfStamper.Close();
reader.Close();
}
}
}