logo Aspose.PDF使用教程 我也要发布文档

使用C#实现PDF文件和字节数组的相互转换


字节数组有助于存储或传输数据。同样,PDF文件格式因其功能和兼容性而广受欢迎。可以使用C#语言将PDF文件转换为字节数组,也可以将字节数组转换为PDF文件。这可以帮助更有效地在数据库中存储和归档PDF文件,还可以通过使用字节数组来序列化数据。让我们探讨这些格式的互转换性。

  • 使用C#将PDF文件转换为字节数组
  • 使用C#将字节数组转换为PDF文件

点击下载最新版Aspose.PDF


使用C#将PDF文件转换为字节数组

可以将PDF转换为字节数组,以便传输或存储它以进行进一步处理。例如,您可能需要序列化PDF文档,然后将其转换为字节数组会有所帮助。您需要按照以下步骤将PDF转换为字节数组:

  • 加载输入PDF文件
  • 初始化字节数组
  • 初始化FileStream对象
  • 将文件内容加载到字节数组中

以下代码显示了如何使用C#将PDF文件转换为字节数组,其中将所得的ByteArray传递给将输入文件转换为图像的方法:

dataDir = @"D:\Test\";

// Load input PDF file
string inputFile = dataDir + @"testpdf.pdf";

// Initialize a byte array
byte[] buff = null;

// Initialize FileStream object
FileStream fs = new FileStream(inputFile, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
long numBytes = new FileInfo(inputFile).Length;

// Load the file contents in the byte array
buff = br.ReadBytes((int) numBytes);
fs.Close();

// Work with the PDF file in byte array
ConvertPDFToJPEG(buff, 300, dataDir);


public static void ConvertPDFToJPEG(Byte[] PDFBlob, int resolution, string dataDir)
{
    // Open document
    using (MemoryStream InputStream = new MemoryStream(PDFBlob))
    {
        Aspose.Pdf.Document pdfDocument = new Aspose.Pdf.Document(InputStream);

        for (int pageCount = 1; pageCount <= pdfDocument.Pages.Count; pageCount++) { using (FileStream imageStream = new FileStream(dataDir + "image" + pageCount + "_out" + ".jpg", FileMode.Create)) { // Create JPEG device with specified attributes // Width, Height, Resolution, Quality // Quality [0-100], 100 is Maximum // Create Resolution object Aspose.Pdf.Devices.Resolution res = new Aspose.Pdf.Devices.Resolution(resolution); // JpegDevice jpegDevice = new JpegDevice(500, 700, resolution, 100); // added the following to determine if landscape or not Int32 height, width = 0; PdfFileInfo info = new PdfFileInfo(pdfDocument); width = Convert.ToInt32(info.GetPageWidth(pdfDocument.Pages[pageCount].Number)); height = Convert.ToInt32(info.GetPageHeight(pdfDocument.Pages[pageCount].Number)); Aspose.Pdf.Devices.JpegDevice jpegDevice = //new Aspose.Pdf.Devices.JpegDevice(Aspose.Pdf.PageSize.A4, res, 100); new Aspose.Pdf.Devices.JpegDevice(width, height, res, 100); // Convert a particular page and save the image to stream //Aspose.Pdf.PageSize.A4.IsLandscape = true; jpegDevice.Process(pdfDocument.Pages[pageCount], imageStream); // Close stream imageStream.Close(); } } } }

使用C#将字节数组转换为PDF文件

让我们进一步进行下一步,可以将字节数组转换为PDF文件。让我们通过将图像作为字节数组转换为PDF文件的示例来学习这一点。您需要按照以下步骤将字节数组转换为PDF文件。

  • 加载输入文件
  • 初始化字节数组
  • 将输入图像加载到字节数组中
  • 初始化Document类的实例
  • 在PDF页面上添加图像
  • 保存输出PDF文件

以下代码说明了如何使用C#以编程方式将字节数组转换为PDF文件:

// Load input file
string inputFile = dataDir + @"Test.PNG";

// Initialize byte array
byte[] buff = null;
FileStream fs = new FileStream(inputFile, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
long numBytes = new FileInfo(inputFile).Length;

// Load input image into Byte Array
buff = br.ReadBytes((int)numBytes);


Document doc = new Document();
// Add a page to pages collection of document
Page page = doc.Pages.Add();
// Load the source image file to Stream object
MemoryStream outstream = new MemoryStream();
MemoryStream mystream = new MemoryStream(buff);
// Instantiate BitMap object with loaded image stream
Bitmap b = new Bitmap(mystream);

// Set margins so image will fit, etc.
page.PageInfo.Margin.Bottom = 0;
page.PageInfo.Margin.Top = 0;
page.PageInfo.Margin.Left = 0;
page.PageInfo.Margin.Right = 0;

page.CropBox = new Aspose.Pdf.Rectangle(0, 0, b.Width, b.Height);
// Create an image object
Aspose.Pdf.Image image1 = new Aspose.Pdf.Image();
// Add the image into paragraphs collection of the section
page.Paragraphs.Add(image1);
// Set the image file stream
image1.ImageStream = mystream;

// Save resultant PDF file
doc.Save(outstream, SaveFormat.Pdf);
//doc.Save(dataDir + "outstream.pdf", SaveFormat.Pdf);

// Close memoryStream object
mystream.Close();

还想要更多吗?您可以点击阅读【2020 · Aspose最新资源整合】查找需要的教程资源。如果您有任何疑问或需求,请随时加入Aspose技术交流群(761297826),我们很高兴为您提供查询和咨询