0

Ecrion Ultrascale を使用して Web サービスを使用して PDF から TIFF に変換していますが、変換が完了した後も出力ファイル (レンダリングされたファイル) がまだ使用されていることに気付いたことを除いて、すべて正常に動作します。この問題を解決するにはどうすればよいですか?

[WebMethod]
    public void ConvertPDF2Tiff(string fileName, bool createFolder, string folderName)
    {
        string filename = Path.GetFileNameWithoutExtension(fileName);
        string path = Path.GetDirectoryName(fileName);
        String inFilePath = fileName;
        String outFilePath;
        if (createFolder)
        {
            outFilePath = Path.Combine(path, "temp", filename + ".tif");
        }
        else
        {
            outFilePath = Path.Combine(path, filename + ".tif");
        }
        Stream outStm = null;
        Directory.CreateDirectory(Path.Combine(path, "temp"));
        // Open the out stream
        outStm = new FileStream(outFilePath, FileMode.Create);

        // Initialize data source
        Stream sw = File.OpenRead(inFilePath);
        IDataSource input = new XmlDataSource(sw, Engine.InputFormat.PDF);

        // Initialize rendering parameters
        RenderingParameters p = new RenderingParameters();
        p.CompressionAlgorithm = Engine.CompressionAlgorithm.LZW;
        p.OutputFormat = Engine.OutputFormat.TIFF;

        // Render the TIFF
        Engine eng = new Engine();
        eng.Render(input, outStm, p);
        sw.Close();
        outStm.Close();
    }

前もって感謝します。

4

2 に答える 2

0

何らかの理由で [using] を囲んで出力ファイルにストリームを使用することでうまくいきました。これが私が使用したコードです

public void ConvertPDF2Tiff(string fileName, bool createFolder, string folderName)
    {
        string filename = Path.GetFileNameWithoutExtension(fileName);
        string path = Path.GetDirectoryName(fileName);
        String inFilePath = fileName;
        String outFilePath;
        if (createFolder)
        {
            Directory.CreateDirectory(Path.Combine(path, "temp"));
            outFilePath = Path.Combine(path, "temp", filename + ".tif");
        }
        else
        {
            outFilePath = Path.Combine(path, filename + ".tif");
        }
        //Stream outStm = File.Create(outFilePath);

        // Open the out stream
        //outStm = new FileStream(outFilePath, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite, 0, FileOptions.None);
        //outStm = File.Create(outFilePath);
        // Initialize data source
        Stream sw = File.OpenRead(inFilePath);
        IDataSource input = new XmlDataSource(sw, Engine.InputFormat.PDF);

        // Initialize rendering parameters
        RenderingParameters p = new RenderingParameters();
        p.OutputFormat = Engine.OutputFormat.TIFF;
        p.ImageErrorsHandlingMode = Engine.ImageErrorsHandlingMode.Ignore;
        p.CompressionAlgorithm = Engine.CompressionAlgorithm.LZW;


        // Render the TIFF
        Engine eng = new Engine();
        OutputInformation renderOutput = new OutputInformation();
        using (FileStream outStm = new FileStream(outFilePath, FileMode.Create))
        {
            eng.Render(input, outStm, p, ref renderOutput);
        }

        sw.Close();
        //outStm.Close();
    }
于 2015-03-31T11:00:52.953 に答える
0

ほとんどの場合、ファイル ストリームを開いたままにしていたため、ファイルが排他モード (読み取りと書き込みの両方) でロックされていました。(...) を使用することは、基になるシステム ファイル ハンドルを解放するために outStm.close() を呼び出すことと同じです。

于 2015-07-30T00:59:27.233 に答える