[英]how to use and where i can find export params in Adobe Illustrator api C#
[英]How can I remove image properties such as local path that Adobe Illustrator has been embedded to PDF file?
我正在嘗試使用iTextSharp(不是Java版本)替換PDF文件中的圖像。 它工作正常,但是唯一的問題是,當我使用Adobe Illustrator打開該PDF時,始終使用舊的硬鏈接打開它。 這意味着Abode Illustrator始終在替換之前查看舊圖像。 這里有點奇怪,它可以使用Adobe Reader很好地查看(可以查看替換的圖像)。
這是我嘗試過的代碼:
public static void ReplaceImage(string pdfIn, string imagePath, string pdfOut)
{
PdfReader reader = new PdfReader(pdfIn);
PdfStamper stamper = new PdfStamper(reader, new FileStream(pdfOut, FileMode.Create));
PdfWriter writer = stamper.Writer;
Image img = Image.GetInstance(SysDrawing.Image.FromFile(imagePath), ImageFormat.Tiff);
PdfDictionary page = reader.GetPageN(1);
PdfDictionary resources = page.GetAsDict(PdfName.RESOURCES);
PdfDictionary xobject = resources.GetAsDict(PdfName.XOBJECT);
PdfDictionary properties = resources.GetAsDict(PdfName.PROPERTIES);
PdfDictionary procset = resources.GetAsDict(PdfName.PROCSET);
if (xobject != null)
{
List<PdfName> imgs = new List<PdfName>();
foreach (var ele in xobject.Keys)
{
PdfIndirectReference iref = xobject.GetAsIndirectObject(ele);
imgs.Add(ele);
if (iref.IsIndirect())
{
try
{
PdfDictionary pg = (PdfDictionary)PdfReader.GetPdfObject(iref);
if (pg != null)
{
PdfReader.KillIndirect(iref);
if (PdfName.IMAGE.Equals(SubType))
{
if (img.ImageMask != null)
writer.AddDirectImageSimple(img.ImageMask);
writer.AddDirectImageSimple(img, iref);
}
}
else
{
PdfReader.KillIndirect(iref);
writer.AddDirectImageSimple(img, iref);
}
}
catch {
continue;
}
}
}
}
//stamper.SetFullCompression();
stamper.Close();
stamper.Dispose();
reader.RemoveUnusedObjects();
reader.RemoveAnnotations();
reader.RemoveFields();
reader.Close();
reader.Dispose();
}
任何答案將不勝感激!
您的PDF包含兩個不同的文檔:一個使用PDF語法描述,另一個使用Adobe Illustrator語法描述。 這兩個不同的文檔看起來應該相同,但是當您更改了該文檔的PDF版本時,它們不再起作用。
您將文檔視為一個文檔,因為AI文檔存儲在PDF文檔中。 在SO的另一個問題中,mkl解釋了該機制: 使用iText庫在pdf中插入隱藏的摘要
在他的回答中,mkl解釋了如何將隱藏數據(在這種情況下為隱藏摘要,在您情況下為IA格式的文檔)添加到PDF中。
您可以像這樣刪除第二個文檔:
PdfDictionary catalog = reader.getCatalog();
catalog.remove(PdfName.PIECEINFO);
當然,這將完全丟棄Adobe Illustrator,因此您將無法再在Adobe Illustrator中編輯PDF。 如果您希望圖像更改AI語法,則需要一個能夠更改AI語法的庫(我不知道任何此類庫)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.