由于我是Aspose的新手,在下面的情况下我需要帮助 我想使用Aspose将多个PDF合并为1个PDF,我可以轻松地完成,但问题是,我想将PDF大小限制为200MB。 这意味着,如果我合并的PDF大小超过200MB,那么我需要将PDF拆分为多个PDF。例如,如果我的合并PDF是300MB,那么第一个PDF应该是200MB并且第二个PDF应该是100MB。
主要问题是,我无法在下面的代码中找到文档的大小。我正在使用下面的代码。
Document destinationPdfDocument = new Document();
Document sourcePdfDocument = new Document();
//Merge PDF one by one
for (int i = 0; i < filesFromDirectory.Count(); i++)
{
if (i == 0)
{
destinationPdfDocument = new Document(filesFromDirectory[i].FullName);
}
else
{
// Open second document
sourcePdfDocument = new Document(filesFromDirectory[i].FullName);
// Add pages of second document to the first
destinationPdfDocument.Pages.Add(sourcePdfDocument.Pages);
//** I need to check size of destinationPdfDocument over here to limit the size of resultant PDF**
}
}
// Encrypt PDF
destinationPdfDocument.Encrypt("userP", "ownerP", 0, CryptoAlgorithm.AESx128);
string finalPdfPath = Path.Combine(destinationSourceDirectory, destinatedPdfPath);
// Save concatenated output file
destinationPdfDocument.Save(finalPdfPath);
基于大小合并PDF的其他方式也值得赞赏。
在此先感谢
答案 0 :(得分:0)
我担心在物理保存之前没有直接的方法来确定PDF文件的大小。因此,我们已在问题跟踪系统中记录了 PDFNET-43073 的功能请求,产品团队一直在调查此功能的可行性。只要我们对该功能的可用性有一些重要更新,我们一定会通知您。请多花点时间。
但是,作为一种解决方法,您可以将文档保存到内存流中,并检查该内存流的大小,是否超出所需的PDF大小。请查看以下代码段,其中我们使用上述方法生成了所需大小为200MB的PDF。
//Instantiate document objects
Document destinationPdfDocument = new Document();
Document sourcePdfDocument = new Document();
//Load source files which are to be merged
var filesFromDirectory = Directory.GetFiles(dataDir, "*.pdf");
for (int i = 0; i < filesFromDirectory.Count(); i++)
{
if (i == 0)
{
destinationPdfDocument = new Document(filesFromDirectory[i]);
}
else
{
// Open second document
sourcePdfDocument = new Document(filesFromDirectory[i]);
// Add pages of second document to the first
destinationPdfDocument.Pages.Add(sourcePdfDocument.Pages);
//** I need to check size of destinationPdfDocument over here to limit the size of resultant PDF**
MemoryStream ms = new MemoryStream();
destinationPdfDocument.Save(ms);
long filesize = ms.Length;
ms.Flush();
// Compare the filesize in MBs
if (i == filesFromDirectory.Count() - 1)
{
destinationPdfDocument.Save(dataDir + "PDFOutput_" + i + ".pdf");
}
else if ((filesize / (1024 * 1024)) < 200)
continue;
else
{
destinationPdfDocument.Save(dataDir + "PDFOutput_" + i.ToString() + ".pdf");
destinationPdfDocument = new Document();
}
}
}
我希望这会有所帮助。如果您需要任何进一步的帮助,请告诉我们。
我与Aspose一起担任开发者布道者。