3
我想用iTextSharp做一些相對簡單的事情,但我總是覺得它很混亂,無法找到一些幫助。iTextSharp - 打開一個文件並保存PdfDestination和PdfAction
我有一種情況,我使用的第三方產品生成PDF,但沒有設置初始視圖設置(縮放,適合寬度等)的選項。
我已經發現了一些代碼,將允許我做這iTextSharp的: -
我不能工作出的位是如何將其應用到已經存在的文件 - 這似乎適用於任何新文件,或者我在iTextSharp中創建的內容,但不是現有的PDF。有沒有辦法做到這一點,以及如何做到這一點?
提前許多感謝,
亞當
PS - 已經找到了答案,這個.. StackOverflow上不會讓我雖然收我自己的問題?似乎有點愚蠢,但無論如何,像這樣做 -
PdfReader reader = new PdfReader(new FileStream(fileName, FileMode.Open, FileAccess.Read));
Rectangle size = reader.GetPageSizeWithRotation(1);
using (Document document = new Document(size))
{
using (PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(Path.Combine(Path.GetDirectoryName(fileName), "Zoom" + Path.GetFileName(fileName)), FileMode.Create, FileAccess.ReadWrite)))
{
//open our document
document.Open();
PdfContentByte cb = writer.DirectContent;
//this creates a new destination to send the action to when the document is opened.
PdfDestination pdfDest = new PdfDestination(PdfDestination.FITH, reader.GetPageSize(1).Top);
//create a new action to send the document to our new destination.
PdfAction action = PdfAction.GotoLocalPage(1, pdfDest, writer);
for (int pageNumber = 1; pageNumber <= reader.NumberOfPages; pageNumber++)
{
//need to change page size for landscape/portrait
document.SetPageSize(reader.GetPageSizeWithRotation(pageNumber));
document.NewPage();
PdfImportedPage page = writer.GetImportedPage(reader, pageNumber);
cb.AddTemplate(page, 0, 0);
}
//set the page mode
int PageMode = 0;
PageMode += PdfWriter.PageLayoutOneColumn;
//set the open action for our writer object
writer.SetOpenAction(action);
writer.ViewerPreferences = PageMode;
writer.SetFullCompression();
//finally, close our document
document.Close();
}
}
嗨蒂姆,這是我找到上面的代碼 - 爲我自己使用略有改變。謝謝你的迴應 –