iTextSharp高手进来接分
我用一个网络上给出的例子给一个已有的PDF文件加密,加密代
码如下.可见代码中是通过建立新文件,然后给新文件加密后将
要加密内容COPY到新文件中。但那是用这种方式后原PDF文件的
书签锚点(也就是目录)并没有过来。我想问一下用什么方式能
把书签目录也一起复制过来或者有没有方法能够不用复制直接将
要加密的文件进行密码加密的?比较急,高手请帮忙!
using System.Text;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
string sname=Server.MapPath("temp/")+"\\UML开发教
程.pdf";
string sname1=Server.MapPath("temp/")+"\\UML开发教程
_psd.pdf";
PdfReader reader = new PdfReader(sname);
int n = reader.NumberOfPages;
Document document = new Document
(reader.GetPageSizeWithRotation(1));
PdfWriter writer=PdfWriter.GetInstance(document,
new FileStream(sname1, FileMode.Create));
writer.SetEncryption(PdfWriter.STRENGTH128BITS,
"123456", null, PdfWriter.AllowPrinting);
document.Open();
PdfContentByte cb = writer.DirectContent;
PdfImportedPage page;
int rotation;
int i = 0;
// step 4: we add content
while (i < n)
{
i++;
document.SetPageSize(reader.GetPageSizeWithRotation
(i));
document.NewPage();
page = writer.GetImportedPage(reader, i);
rotation = reader.GetPageRotation(i);
if (rotation == 90 || rotation == 270)
{
cb.AddTemplate(page, 0, -1f, 1f, 0, 0,
reader.GetPageSizeWithRotation(i).Height);
}
else
{
cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
}
document.Close();
writer.Close();
------解决方案--------------------用过 只是简单的参照提供的实例做...
------解决方案--------------------同1楼用过
只能帮顶
------解决方案--------------------我昨天也在想这个问题,你看有没有拷贝书签的函数
可以交流一下,我最近也在研究这个
sayid@foxmail.com
------解决方案--------------------只能帮顶了
------解决方案--------------------
我在 WinForm 中做过,直接用 PdfStamper 类就可以达到源文件另存,同时增加功能(如加密)的效果。当初看的示例还是 WebForm 中的呢,记得构造函数的第二个参数用的是 MemoryStream,我这里是个 FileStream,并无大碍。
C# code
PdfReader pdfReader = new PdfReader(textBoxFilename.Text);
FileStream stream = new FileStream(saveFileDialogPdf.FileName, FileMode.Create);
PdfStamper pdfStamper = new PdfStamper(pdfReader, stream);
if (checkBoxHideBar.Checked)
{
pdfStamper.ViewerPreferences = PdfWriter.HideMenubar | PdfWriter.HideToolbar;
}
pdfStamper.SetEncryption(PdfWriter.STRENGTH128BITS, textBoxUserPassword.Text, textBoxOwnerPassword.Text, 0);
pdfStamper.Close();