请帮我解决这个问题。
提前致谢
答案 0 :(得分:1)
这可能与文件中的资源有关。例如,如果原始文档在每个文档上使用嵌入字体,则原始文件中只有一个字体实例。拆分时,每个文件都需要具有该字体。总开销为n页×sizeof(每种字体)。导致这种膨胀的元素包括字体,图像,颜色配置文件,文档模板(也称为表单),XMP等。
虽然它对您当前的问题没有帮助,但如果您使用Atalasoft dotImage中的PDF工具,您的任务就变成了1个班轮:
PdfDocument.Separate(userpassword, ownerpassword, origPath, destFolder, "Separated Page{0}.pdf", true);
将获取orig文件中的PDF并在dest文件夹中创建新页面,每个文件夹都以模式命名。最后的bool是覆盖现有文件。
免责声明:我在Atalasoft工作并编写了PDF库(也用于在Acrobat版本1,2,3和4上的Adobe工作)。
答案 1 :(得分:0)
您是否尝试过在编写器上设置压缩?
Document doc = new Document();
using (MemoryStream ms = new MemoryStream())
{
PdfWriter writer = PdfWriter.GetInstance(doc, ms);
writer.SetFullCompression();
}
答案 2 :(得分:0)
嗨大家我修改了上面的代码,将PDF文件拆分成多个Pdf文件。
iTextSharp.text.pdf.PdfReader reader = null;
int currentPage = 1;
int pageCount = 0;
//string filepath_New = filepath + "\\PDFDestination\\";
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
//byte[] arrayofPassword = encoding.GetBytes(ExistingFilePassword);
reader = new iTextSharp.text.pdf.PdfReader(filepath);
reader.RemoveUnusedObjects();
pageCount = reader.NumberOfPages;
string ext = System.IO.Path.GetExtension(filepath);
for (int i = 1; i <= pageCount; i++)
{
iTextSharp.text.pdf.PdfReader reader1 = new iTextSharp.text.pdf.PdfReader(filepath);
string outfile = filepath.Replace((System.IO.Path.GetFileName(filepath)), (System.IO.Path.GetFileName(filepath).Replace(".pdf", "") + "_" + i.ToString()) + ext);
reader1.RemoveUnusedObjects();
iTextSharp.text.Document doc = new iTextSharp.text.Document(reader.GetPageSizeWithRotation(currentPage));
iTextSharp.text.pdf.PdfCopy pdfCpy = new iTextSharp.text.pdf.PdfCopy(doc, new System.IO.FileStream(outfile, System.IO.FileMode.Create));
doc.Open();
for (int j = 1; j <= 1; j++)
{
iTextSharp.text.pdf.PdfImportedPage page = pdfCpy.GetImportedPage(reader1, currentPage);
pdfCpy.SetFullCompression();
pdfCpy.AddPage(page);
currentPage += 1;
}
doc.Close();
pdfCpy.Close();
reader1.Close();
reader.Close();
}