0

我目前正在我的程序结束,但我进入了一个我没有经验的部分。我已经能够通过其他方法将 PDF 转换为 Base64,但根据我的说明,这些方法是不允许的给定的。我已经在下面发布了我的代码,希望有人可以让我朝着正确的方向开始。我也不知道如何放入这些卷,所以任何帮助都会很棒!包含的是 Get Binaries 和它读取的 IO 类。

默认.cs.aspx

private static List<Binary> GetBinaries()
{
    return new List<Binary>
    { 
        new Binary
        {
            //hardcoded but need to call from fileUpload1
            BinaryBase64Object = IO.ReadFromFile(@"..\..\EFACTS eRecord Technical Specification.pdf"), **<-- How do I get this to read from fileupload1**
            BinaryID = "BIN1234", //hardcoded
            BinarySizeValue = 56443, //hardcoded
            FileName = " test.my.pdf", //hardcoded
            PageRange = "23-89", //hardcoded
            NoOfPages = 14, //hardcoded
            TotalVolumes = 1, //hardcoded
            Volume = 1 //hardcoded
        }
    };
}

IO.cs

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Electronic_Filing_of_Appeals;

namespace Electronic_Filing_of_Appeals
{

    public static class IO
    {

        public static void ReadWriteStream(MemoryStream readStream, Stream writeStream)
        {

            using (writeStream)
            {
                int Length = 256;
                Byte[] buffer = new Byte[Length];

                readStream.Position = 0;
                int bytesRead = readStream.Read(buffer, 0, Length);

                // write the required bytes
                while (bytesRead > 0)
                {
                    writeStream.Write(buffer, 0, bytesRead);
                    bytesRead = readStream.Read(buffer, 0, Length);
                }

                readStream.Close();
                writeStream.Close();
            }
        }

        public static MemoryStream FileToMemoryStream(string filename)
        {
            FileStream inStream = System.IO.File.OpenRead(filename);
            MemoryStream outStream = new MemoryStream();

            outStream.SetLength(inStream.Length);
            inStream.Read(outStream.GetBuffer(), 0, (int)inStream.Length);

            outStream.Flush();
            inStream.Close();

            return outStream;
        }

        public static MemoryStream ConvertStreamToMemoryStream(Stream stream)
        {
            MemoryStream memoryStream = new MemoryStream();

            if (stream != null)
            {
                byte[] buffer = stream.ReadFully();
                if (buffer != null)
                {
                    var binaryWriter = new BinaryWriter(memoryStream);
                    binaryWriter.Write(buffer);
                }
            }
            return memoryStream;
        }

        public static byte[] ReadFromFile(string filePath)
        {
            FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            byte[] fileRD = br.ReadBytes((int)fs.Length);
            br.Close();
            fs.Close();
            return fileRD;
        }

        public static void SaveToFile(byte[] byteData, string fileName)
        {
            FileStream fs = new FileStream(fileName, FileMode.Create);
            fs.Write(byteData, 0, byteData.Length);
            fs.Close();
        }

        public static byte[] ReadFully(this Stream input)
        {
            byte[] buffer = new byte[16 * 1024];

            using (MemoryStream ms = new MemoryStream())
            {
                int read;
                while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
                {
                    ms.Write(buffer, 0, read);
                }

                return ms.ToArray();
            }
        }
    }
}
4

1 回答 1

0

您应该寻求更多帮助。可能有一些用于阅读已在使用的 PDF 文件的库。尝试找出它是什么,并阅读代码以了解它是如何使用的。

如果这是项目中第一次有人必须阅读 PDF 文件,您将不得不采用一些库。自己写一个非常耗时。您正在寻找的是一个可以从 PDF 中读取元数据的库。

两个这样的库是iTextSharpPDFSharp。以下是 PDFSharp 的示例:

var doc = PdfReader.Open(@"icpc_briefing_1_sep_10.pdf");
Console.WriteLine("Number of pages: {0}", doc.PageCount);

Console.WriteLine();
Console.WriteLine("=== INFO ===");
foreach (KeyValuePair<string, PdfItem> pair in doc.Info)
{
    Console.WriteLine("{0}: {1}", pair.Key, pair.Value);
}

byte[] xmlData = GetMetadata(doc);
if (xmlData != null)
{
    Console.WriteLine();
    Console.WriteLine("=== XMP ===");
    Console.Write(Encoding.UTF8.GetString(xmlData));
    Console.WriteLine();
}

byte[] GetMetadata(PdfDocument doc)
{
    // PdfSharp does not have direct support for the XML metadata, but it does
    // allow you to go poking into the internal structure.
    PdfItem metadataItem;
    if (doc.Internals.Catalog.Elements.TryGetValue("/Metadata", out metadataItem))
    {
        var metadataRef = (PdfReference) metadataItem;
        var metadata = (PdfDictionary) metadataRef.Value;
        return metadata.Stream.Value;
    }
    return null;
}

示例输出:

Number of pages: 27

=== INFO ===
/CreationDate: D:20100910191635+08'00'
/Author: Steven Halim
/Creator: PScript5.dll Version 5.2.2
/Producer: Acrobat Distiller 8.1.0 (Windows)
/ModDate: D:20130610173442+02'00'
/Title: Microsoft PowerPoint - icpc_briefing_1_sep_10 [Compatibility Mode]

=== XMP ===
<?xpacket begin="?" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 4.0-c316 44.253921, Sun Oct 01 2006 17:14:39">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:xap="http://ns.adobe.com/xap/1.0/">
         <xap:CreatorTool>PScript5.dll Version 5.2.2</xap:CreatorTool>
         <xap:ModifyDate>2010-09-10T19:16:35+08:00</xap:ModifyDate>
         <xap:CreateDate>2010-09-10T19:16:35+08:00</xap:CreateDate>
      </rdf:Description>
      <rdf:Description rdf:about=""
            xmlns:dc="http://purl.org/dc/elements/1.1/">
         <dc:format>application/pdf</dc:format>
         <dc:title>
            <rdf:Alt>
               <rdf:li xml:lang="x-default">Microsoft PowerPoint - icpc_briefing_1_sep_10 [Compatibility Mode]</rdf:li>
            </rdf:Alt>
         </dc:title>
         <dc:creator>
            <rdf:Seq>
               <rdf:li>Steven Halim</rdf:li>
            </rdf:Seq>
         </dc:creator>
      </rdf:Description>
      <rdf:Description rdf:about=""
            xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
         <pdf:Producer>Acrobat Distiller 8.1.0 (Windows)</pdf:Producer>
      </rdf:Description>
      <rdf:Description rdf:about=""
            xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/">
         <xapMM:DocumentID>uuid:b5ffc85b-6578-48fb-bddf-a5215ffa9d35</xapMM:DocumentID>
         <xapMM:InstanceID>uuid:f45826a4-8c58-4a54-bac1-7f3192866d57</xapMM:InstanceID>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>

以下是更多示例:http ://www.pdfsharp.net/wiki/PDFsharpSamples.ashx


要从<asp:FileUpload>控件中获取数据,您只需访问FileUpload.FileBytes( byte[]) 或FileUpload.FileContent( Stream)。或者,您可以访问FileUpload.PostedFileRequest.Files了解更多信息。

var doc = PdfReader.Open(FileUpload1.FileContent);
于 2013-06-09T16:07:10.400 回答