iTextSharp的:有没有办法复制链接时导入页面? [英] Itextsharp: Is There Any Way To Copy Links When Import Pages?
本文介绍了iTextSharp的:有没有办法复制链接时导入页面?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我工作的一个项目,我需要编辑PDF的显示前
我需要
- 添加水印
- 编辑权限(锁定避免复制/粘贴和另存为')
- 编辑观众preferences
和我做到了......与工作除了一件事精细,原始文件的链接不会在新文件中工作...任何想法?
请注意:其实,这是我的code(我使用iTextSharp的)
私人无效loadPdf()
{
如果(Request.QueryString.HasKeys())
{
如果(Request.QueryString.GetKey(0)==thepath与&&放大器; Request.QueryString.GetKey(1)==isprintable与&&放大器; Request.QueryString.GetKey(2)==型)
{
#区域kuak
文档DOC =新的文档();
PdfReader pdfReader =新PdfReader(的Request.QueryString [thepath]);
使用(MemoryStream的MemoryStream的=新的MemoryStream())
{
PdfWriter pdfWriter = PdfWriter.GetInstance(文件,MemoryStream的);
pdfWriter.Viewer preferences = PdfWriter.PageModeUseOutlines;
//pdfWriter.Viewer$p$pferences = PdfWriter.PageLayoutTwoColumnLeft; /// Despliega EL docuemnto带削去德奥哈斯
pdfWriter.Viewer preferences = PdfWriter.PageLayoutOneColumn;
pdfWriter.Viewer preferences = PdfWriter.HideToolbar;
//pdfWriter.Viewer$p$pferences = PdfWriter.HideWindowUI; /// quita洛杉矶滚动ŸEL面板德拉derecha古兰经contiene洛杉矶书签Ÿ拉斯buskedas迪登特鲁德尔PDF
如果(的Request.QueryString [isprintable] ==N)
{
pdfWriter.Viewer preferences = PdfWriter.HideMenubar;
System.Text.UTF8Encoding编码=新System.Text.UTF8Encoding();
pdfWriter.SetEncryption(NULL,encoding.GetBytes(mYpAssss),0,PdfWriter.STRENGTH40BITS);
}
doc.Open();
PdfContentByte pdfContentByte = pdfWriter.DirectContent;
doc.AddDocListener(pdfWriter);
对于(INT页= 1;页< = pdfReader.NumberOfPages;网页++)
{
//doc.SetPageSize(pdfReader.GetPageSize(page));
doc.SetPageSize(pdfReader.GetPageSizeWithRotation(页));
doc.NewPage();
PdfImportedPage pdfImportedPage = pdfWriter.GetImportedPage(pdfReader,页);
INT腐烂= pdfReader.GetPageRotation(页);
如果(腐== || 90腐== 270)
pdfContentByte.AddTemplate(pdfImportedPage,0,-1.0F,1.0F,0,0,pdfReader.GetPageSizeWithRotation(页).Height);
其他
pdfContentByte.AddTemplate(pdfImportedPage,1.0F,0,0,1.0F,0,0);
字符串theId = findId();
如果(isWatermarkNeeded(theId))
{
#REGION添加文字水印
//pdfContentByte.BeginText();
//iTextSharp.text.Rectangle的pageSize = pdfReader.GetPageSizeWithRotation(页);
// BASEFONT BASEFONT = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD,System.Text.Encoding.ASCII.EncodingName,FALSE);
//pdfContentByte.SetFontAndSize(baseFont,200);
// BaseColor baseColor =新BaseColor(255,0,0,20);
//pdfContentByte.SetColorFill(baseColor);
//浮动textAngle =(浮点)GetHypotenuseAngleInDegreesFrom(pageSize.Height,pageSize.Width);
//pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER,草稿,350,pageSize.Height / 2,textAngle);
//pdfContentByte.EndText();
#endregion
#区域添加图片水印 字符串fechaExp =埃斯特旺斯这份执行:+ GetExpirationDate(theId).ToShortDateString();
pdfContentByte.BeginText();
//iTextSharp.text.Image IMG = iTextSharp.text.Image.GetInstance(使用Server.Mappath(〜/图片/ watermark3.png));
iTextSharp.text.Image IMG = iTextSharp.text.Image.GetInstance(ImageCheck.CreatePicture(@C:\\用户\\ MYUSER \\桌面\\ watermark.png,fechaExp).ToArray());
img.SetAbsolutePosition(0,0);
pdfContentByte.AddImage(IMG);
pdfContentByte.EndText();
#endregion
} }
pdfReader.Close();
doc.Close();
字节[] =内容memoryStream.ToArray();
Response.ContentType =应用程序/ PDF
Response.AddHeader(内容长度,content.Length.ToString());
Response.BinaryWrite(内容);
}
#endregion
}
其他
{
//干草查询字符串亲无corresponden CON洛杉矶阙本身necesita
}
}
其他
{
//没有本质enviaron洛杉矶查询字符串
}
}
解决方案
您必须得到从原始PDF链接
VAR链接= reader.GetLinks(PAGENUMBER);
,并将其写入到新的PDF
的foreach(在链接VAR链接)
{
VAR注释= link.CreateAnnotation(pdfWriter);
writer.AddAnnotation(注释);
}
I'm working on a project where i need to edit pdf's before display it
I need
- add a watermark
- edit permissions ( lock for avoid 'copy/paste' and 'save as' )
- edit viewer preferences
And i did it... and work fine except for one thing, the links in the original file does not work in the new file... any idea?
NOTE: Actually, this is my code ( i'm using itextsharp )
private void loadPdf()
{
if (Request.QueryString.HasKeys())
{
if (Request.QueryString.GetKey(0) == "thepath" && Request.QueryString.GetKey(1) == "isprintable" && Request.QueryString.GetKey(2) == "type")
{
#region kuak
Document doc = new Document();
PdfReader pdfReader = new PdfReader(Request.QueryString["thepath"]);
using (MemoryStream memoryStream = new MemoryStream())
{
PdfWriter pdfWriter = PdfWriter.GetInstance(doc, memoryStream);
pdfWriter.ViewerPreferences = PdfWriter.PageModeUseOutlines;
//pdfWriter.ViewerPreferences = PdfWriter.PageLayoutTwoColumnLeft; /// Despliega el docuemnto en pares de hojas
pdfWriter.ViewerPreferences = PdfWriter.PageLayoutOneColumn;
pdfWriter.ViewerPreferences = PdfWriter.HideToolbar;
//pdfWriter.ViewerPreferences = PdfWriter.HideWindowUI; /// quita los scrollbars y el panel de la derecha qur contiene los bookmarks y las buskedas dentro del pdf
if (Request.QueryString["isprintable"] == "n")
{
pdfWriter.ViewerPreferences = PdfWriter.HideMenubar;
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
pdfWriter.SetEncryption(null, encoding.GetBytes("mYpAssss"), 0, PdfWriter.STRENGTH40BITS);
}
doc.Open();
PdfContentByte pdfContentByte = pdfWriter.DirectContent;
doc.AddDocListener(pdfWriter);
for (int page = 1; page <= pdfReader.NumberOfPages; page++)
{
//doc.SetPageSize(pdfReader.GetPageSize(page));
doc.SetPageSize(pdfReader.GetPageSizeWithRotation(page));
doc.NewPage();
PdfImportedPage pdfImportedPage = pdfWriter.GetImportedPage(pdfReader, page);
int rot = pdfReader.GetPageRotation(page);
if (rot == 90 || rot == 270)
pdfContentByte.AddTemplate(pdfImportedPage, 0, -1.0F, 1.0F, 0, 0, pdfReader.GetPageSizeWithRotation(page).Height);
else
pdfContentByte.AddTemplate(pdfImportedPage, 1.0F, 0, 0, 1.0F, 0, 0);
string theId = findId();
if (isWatermarkNeeded(theId))
{
#region ADD TEXT WATERMARK
//pdfContentByte.BeginText();
//iTextSharp.text.Rectangle pageSize = pdfReader.GetPageSizeWithRotation(page);
//BaseFont baseFont = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, System.Text.Encoding.ASCII.EncodingName, false);
//pdfContentByte.SetFontAndSize(baseFont, 200);
//BaseColor baseColor = new BaseColor(255, 0, 0, 20);
//pdfContentByte.SetColorFill(baseColor);
//float textAngle = (float)GetHypotenuseAngleInDegreesFrom(pageSize.Height, pageSize.Width);
//pdfContentByte.ShowTextAligned(PdfContentByte.ALIGN_CENTER, "DRAFT", 350, pageSize.Height / 2, textAngle);
//pdfContentByte.EndText();
#endregion
#region ADD IMAGE WATERMARK
string fechaExp = "Este documento vence: " + GetExpirationDate(theId).ToShortDateString();
pdfContentByte.BeginText();
//iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(Server.MapPath("~/images/watermark3.png"));
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(ImageCheck.CreatePicture(@"C:\Users\myUser\Desktop\watermark.png", fechaExp).ToArray());
img.SetAbsolutePosition(0, 0);
pdfContentByte.AddImage(img);
pdfContentByte.EndText();
#endregion
}
}
pdfReader.Close();
doc.Close();
byte[] content = memoryStream.ToArray();
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", content.Length.ToString());
Response.BinaryWrite(content);
}
#endregion
}
else
{
//hay querystring pro no corresponden con los que se necesita
}
}
else
{
//no se enviaron los querystring
}
}
解决方案
You have to get the links from original PDF
var links = reader.GetLinks(pageNumber);
And write them to the new PDF
foreach (var link in links)
{
var annotation = link.CreateAnnotation(pdfWriter);
writer.AddAnnotation(annotation);
}
这篇关于iTextSharp的:有没有办法复制链接时导入页面?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文