Hi,
We have a .net service which downloads multiple PDFs (based on user input) from a sharepoint website and merges them into a single PDF.
We have an issue where the user chooses to view a single PDF. The user is unable to view the generated PDF using Adobe reader 8. (Adobe Reader 9 works fine). However the users desktop is committed to using Adobe Reader 8 for the near term. The user has no issues opening the original PDF file from the sharepoint site.
I have uploaded both the PDF files.
Aspose also seems to shrink the file sizes.
Code to merge the files
---
public void GenerateMemoryStream(DocFormsInput AODocFormsInput, out MemoryStream outputMemoryStream, out DocFormsOutput AODocFormsOutput)
{
string strError = string.Empty;
outputMemoryStream = new MemoryStream();
AODocFormsOutput = new DocFormsOutput();
AODocFormsOutput.StatusInfo = new List<StatusInfo>();
MemoryStream docCoverPageStream = null;
MemoryStream mstrFileOne = null;
MemoryStream mstrFileTwo = null;
DateTime dtStartTime = DateTime.Now;
try
{
Document pdfDocument1 = null;
//If strInputXML is null or empty, do not generate Doc Cover Page
if (!string.IsNullOrEmpty(AODocFormsInput.strInputXml))
{
//Generate Doc Cover Page
GenerateDocumentCoverPage(AODocFormsInput.strDocType, AODocFormsInput.strInputXml, out docCoverPageStream, out strError);
pdfDocument1 = new Document(docCoverPageStream);
AODocFormsOutput.TimeRequired_DocCoverPageGeneration = ((TimeSpan)DateTime.Now.Subtract(dtStartTime)).ToString();
}
//Need to check sourcefiles array atleast contains 1 pdf
if (AODocFormsInput.strSourceFiles != null && AODocFormsInput.strSourceFiles.Length > 0)
{
if (string.IsNullOrEmpty(strError))
{
for (int pdfCnt = 0; pdfCnt < AODocFormsInput.strSourceFiles.Length; pdfCnt++)
{
if (pdfDocument1 == null)
{
try
{
//pdf document 1 will be the first string in strSourceFiles[]
//byte[] strFileOne = client.DownloadData(AODocFormsInput.strSourceFiles[pdfCnt]);
byte[] strFileOne = GetDocument(AODocFormsInput.strSourceFiles[pdfCnt], AODocFormsInput.strUserName, AODocFormsInput.strPassword, AODocFormsInput.strDomain);
mstrFileOne = new MemoryStream(strFileOne);
pdfDocument1 = new Document(mstrFileOne);
}
catch (Exception)
{
StatusInfo status = new StatusInfo();
status.Severity = "W";
status.BusinessDescription = " Unable To DownLoad file " + AODocFormsInput.strSourceFiles[pdfCnt];
status.Code = "PDF_MERGER_1007";
AODocFormsOutput.StatusInfo.Add(status);
}
}
else
{
if (!string.IsNullOrEmpty(AODocFormsInput.strSourceFiles[pdfCnt]))
{
try
{
//byte[] strFileTwo = client.DownloadData(AODocFormsInput.strSourceFiles[pdfCnt]);
byte[] strFileTwo = GetDocument(AODocFormsInput.strSourceFiles[pdfCnt], AODocFormsInput.strUserName, AODocFormsInput.strPassword, AODocFormsInput.strDomain);
mstrFileTwo = new MemoryStream(strFileTwo);
Document pdfDocument2 = new Document(mstrFileTwo);
pdfDocument1.Pages.Add(pdfDocument2.Pages);
}
catch (Exception)
{
StatusInfo status = new StatusInfo();
status.Severity = "W";
status.BusinessDescription = " Unable To DownLoad file " + AODocFormsInput.strSourceFiles[pdfCnt];
status.Code = "PDF_MERGER_1007";
AODocFormsOutput.StatusInfo.Add(status);
}
}
}
}
}
else
{
StatusInfo status = new StatusInfo();
status.Severity = "E";
status.BusinessDescription = strError;
status.Code = "PDF_MERGER_1008";
AODocFormsOutput.StatusInfo.Add(status);
}
}
AODocFormsOutput.TimeRequired_DownloadAndMergePDFs = ((TimeSpan)DateTime.Now.Subtract(dtStartTime)).ToString();
pdfDocument1.HideToolBar = false;
pdfDocument1.Save(outputMemoryStream);
pdfDocument1.Dispose();
}
catch (Exception ex)
{
StatusInfo status = new StatusInfo();
status.Severity = "E";
status.BusinessDescription = ex.Message;
status.Code = "PDF_MERGER_1009";
AODocFormsOutput.StatusInfo.Add(status);
}
finally
{
if (docCoverPageStream != null)
{
docCoverPageStream.Close();
docCoverPageStream.Dispose();
}
if (mstrFileOne != null)
{
mstrFileOne.Close();
mstrFileOne.Dispose();
}
if (mstrFileTwo != null)
{
mstrFileTwo.Close();
mstrFileTwo.Dispose();
}
}
}
------------
We have a .net service which downloads multiple PDFs (based on user input) from a sharepoint website and merges them into a single PDF.
We have an issue where the user chooses to view a single PDF. The user is unable to view the generated PDF using Adobe reader 8. (Adobe Reader 9 works fine). However the users desktop is committed to using Adobe Reader 8 for the near term. The user has no issues opening the original PDF file from the sharepoint site.
I have uploaded both the PDF files.
Aspose also seems to shrink the file sizes.
Code to merge the files
---
public void GenerateMemoryStream(DocFormsInput AODocFormsInput, out MemoryStream outputMemoryStream, out DocFormsOutput AODocFormsOutput)
{
string strError = string.Empty;
outputMemoryStream = new MemoryStream();
AODocFormsOutput = new DocFormsOutput();
AODocFormsOutput.StatusInfo = new List<StatusInfo>();
MemoryStream docCoverPageStream = null;
MemoryStream mstrFileOne = null;
MemoryStream mstrFileTwo = null;
DateTime dtStartTime = DateTime.Now;
try
{
Document pdfDocument1 = null;
//If strInputXML is null or empty, do not generate Doc Cover Page
if (!string.IsNullOrEmpty(AODocFormsInput.strInputXml))
{
//Generate Doc Cover Page
GenerateDocumentCoverPage(AODocFormsInput.strDocType, AODocFormsInput.strInputXml, out docCoverPageStream, out strError);
pdfDocument1 = new Document(docCoverPageStream);
AODocFormsOutput.TimeRequired_DocCoverPageGeneration = ((TimeSpan)DateTime.Now.Subtract(dtStartTime)).ToString();
}
//Need to check sourcefiles array atleast contains 1 pdf
if (AODocFormsInput.strSourceFiles != null && AODocFormsInput.strSourceFiles.Length > 0)
{
if (string.IsNullOrEmpty(strError))
{
for (int pdfCnt = 0; pdfCnt < AODocFormsInput.strSourceFiles.Length; pdfCnt++)
{
if (pdfDocument1 == null)
{
try
{
//pdf document 1 will be the first string in strSourceFiles[]
//byte[] strFileOne = client.DownloadData(AODocFormsInput.strSourceFiles[pdfCnt]);
byte[] strFileOne = GetDocument(AODocFormsInput.strSourceFiles[pdfCnt], AODocFormsInput.strUserName, AODocFormsInput.strPassword, AODocFormsInput.strDomain);
mstrFileOne = new MemoryStream(strFileOne);
pdfDocument1 = new Document(mstrFileOne);
}
catch (Exception)
{
StatusInfo status = new StatusInfo();
status.Severity = "W";
status.BusinessDescription = " Unable To DownLoad file " + AODocFormsInput.strSourceFiles[pdfCnt];
status.Code = "PDF_MERGER_1007";
AODocFormsOutput.StatusInfo.Add(status);
}
}
else
{
if (!string.IsNullOrEmpty(AODocFormsInput.strSourceFiles[pdfCnt]))
{
try
{
//byte[] strFileTwo = client.DownloadData(AODocFormsInput.strSourceFiles[pdfCnt]);
byte[] strFileTwo = GetDocument(AODocFormsInput.strSourceFiles[pdfCnt], AODocFormsInput.strUserName, AODocFormsInput.strPassword, AODocFormsInput.strDomain);
mstrFileTwo = new MemoryStream(strFileTwo);
Document pdfDocument2 = new Document(mstrFileTwo);
pdfDocument1.Pages.Add(pdfDocument2.Pages);
}
catch (Exception)
{
StatusInfo status = new StatusInfo();
status.Severity = "W";
status.BusinessDescription = " Unable To DownLoad file " + AODocFormsInput.strSourceFiles[pdfCnt];
status.Code = "PDF_MERGER_1007";
AODocFormsOutput.StatusInfo.Add(status);
}
}
}
}
}
else
{
StatusInfo status = new StatusInfo();
status.Severity = "E";
status.BusinessDescription = strError;
status.Code = "PDF_MERGER_1008";
AODocFormsOutput.StatusInfo.Add(status);
}
}
AODocFormsOutput.TimeRequired_DownloadAndMergePDFs = ((TimeSpan)DateTime.Now.Subtract(dtStartTime)).ToString();
pdfDocument1.HideToolBar = false;
pdfDocument1.Save(outputMemoryStream);
pdfDocument1.Dispose();
}
catch (Exception ex)
{
StatusInfo status = new StatusInfo();
status.Severity = "E";
status.BusinessDescription = ex.Message;
status.Code = "PDF_MERGER_1009";
AODocFormsOutput.StatusInfo.Add(status);
}
finally
{
if (docCoverPageStream != null)
{
docCoverPageStream.Close();
docCoverPageStream.Dispose();
}
if (mstrFileOne != null)
{
mstrFileOne.Close();
mstrFileOne.Dispose();
}
if (mstrFileTwo != null)
{
mstrFileTwo.Close();
mstrFileTwo.Dispose();
}
}
}
------------