ABCPdf - изображение не подходит формат - PullRequest
0 голосов
/ 18 ноября 2018

В конце концов, моя цель - отправить необработанные данные изображения из внешнего интерфейса, затем разделить это изображение на любое количество страниц и, наконец, отправить этот pdf обратно во внешний интерфейс для загрузки.

Но каждый раз, когда я использую theDoc.addImageFile(), он говорит мне, что «Изображение не в подходящем формате». Я использую это как ссылку: https://www.websupergoo.com/helppdfnet/source/5-abcpdf/doc/1-methods/addimagefile.htm

Чтобы устранить неполадки, я подумал, что изображение может отображаться неправильно, поэтому я добавил File.WriteAllBytes для просмотра визуализированного изображения, и это было именно то, что я хотел, но все еще не добавлял в PDF. Я также попытался отправить фактический путь к ранее отрендеренному изображению, думая, что новое изображение, возможно, еще не было полностью создано, но оно также дало мне ту же ошибку. Наконец, я подумал, что PNG могут быть проблематичными и изменены на JPG, но это не сработало.

Вот код:

[HttpPost]
public IActionResult PrintToPDF(string imageString)
{
    // Converts dataUri to bytes
    var base64Data = Regex.Match(imageString, @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value;
    var binData = Convert.FromBase64String(base64Data);

    /* Ultimately will be removed, but used for debugging image */
    string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    string imgName= "Test.jpg";
    string filename = Path.Combine(path, imgName);

    System.IO.File.WriteAllBytes(filename, binData);
    /***********************************************************/

    using (Doc theDoc = new Doc())
    {
        // Using explicit path
        theDoc.AddImageFile(@"C:\Users\User\Documents\Test.jpg", 1);
        // Using variable
        //theDoc.AddImageFile(filename, 1);
        // What I really want
        //theDoc.AddImageFile(binData , 1);

        theDoc.Page = theDoc.AddPage();
        theDoc.AddText("Thanks");
        Response.Headers.Clear();
        Response.Headers.Add("content-disposition", "attachment; filename=test.pdf");
        return new FileStreamResult(theDoc.GetStream(), "application/pdf");
    }
}

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Чтобы добавить JPEG из байтового массива, вам нужен Doc.AddImageData вместо Doc.AddImageFile.Обратите внимание, что AddImageFile / AddImageData не поддерживают PNG - для этого вам определенно потребуется использовать XImage.Документация XImage.SetData содержит поддерживаемые в настоящее время форматы изображений.

0 голосов
/ 30 ноября 2018

Попробуйте что-то вроде этого (не проверено, но очищено из собственного кода):

    public int AddImageFile(Doc doc, byte[] data, int insertBeforePageID)
    {
        int pageid;

        using (var img = new XImage())
        {
            img.SetData(data);

            doc.Page = doc.AddPage(insertBeforePageID);
            pageid = doc.Page;
            doc.AddImage(img);
            img.Clear();
        }
        return pageid;
    }
...