Я хочу создать PDF-файл с несколькими отсканированными страницами с помощью сканера. Для этого я использовал iTextSharp:
bool continueScanning = true;
ScanDirectory = Environment.ExpandEnvironmentVariables("%USERPROFILE%/AppData/Local/Temp") + @"\docs\";
System.IO.Directory.CreateDirectory(ScanDirectory);
string pdfPath = Path.Combine(ScanDirectory, "doc" + DateTime.Now.ToString("hhmmss") + ".pdf");
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(pdfPath, FileMode.Create));
while (continueScanning)
{
var dialog = new WIA.CommonDialog();
ImageFile image = dialog.ShowAcquireImage(AlwaysSelectDevice: true);
MemoryStream MStream = null;
byte[] ImgBytes = (byte[])image.FileData.get_BinaryData();
MStream = new MemoryStream(ImgBytes);
Bitmap Bmp = new Bitmap(MStream);
document.Open();
document.NewPage();
iTextSharp.text.Image pdfImage = iTextSharp.text.Image.GetInstance(Bmp, System.Drawing.Imaging.ImageFormat.Jpeg);
pdfImage.ScaleToFit(document.PageSize);
pdfImage.SetAbsolutePosition(0, 0);
pdfImage.Alignment = iTextSharp.text.Image.ALIGN_TOP;
document.Add(pdfImage);
continueScanning = (MessageBox.Show("Continue scanning?", "Scan", MessageBoxButtons.YesNo) == DialogResult.Yes);
}
document.Close();
writer.Close();
Этот код генерирует PDF-файл только с одной страницей, которая является последней отсканированной страницей, но размер файла на диске больше, чем размер, когда я просто сканирую только эту страницу. Так как же добавить новую отсканированную страницу на новую страницу?
Переместите document.Open();
перед петлей!
У вас есть
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(pdfPath, FileMode.Create));
while (continueScanning)
{
...
document.Open();
...
}
document.Close();
writer.Close();
Измените его на
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(pdfPath, FileMode.Create));
document.Open();
while (continueScanning)
{
...
...
}
document.Close();