powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Открыть PDF из MemoryStream
4 сообщений из 104, страница 5 из 5
Открыть PDF из MemoryStream
    #39780208
Volzok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Квейд,

Cпасибо, думал, что достаточно AutoScroll:=true;
А Вы не пробовали сохранять страницу в Bitmap?
Что-то не пойму, что делаю не так, сохраняются файлы нулевого размера.
пробую и через RenderPageBitmap и RenderPageDevice.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  for i:=0 to PdfView.Pdf.PageCount-1 do
    begin
      Btmp:=TBitmap.Create;
      PdfView.Pdf.PageNumber:=i;
      PdfView.Pdf.LoadPage(i);
    //  PdfView.Pdf.RenderPageBitmap(Btmp.Canvas, PdfView.Pdf.Page ,0, 0,PdfView.Width, PdfView.Height, ro0, []);
      PdfView.Pdf.RenderPageDevice(GetDC(Btmp.Canvas.Handle), PdfView.Pdf.Page ,0, 0,PdfView.Width, PdfView.Height, ro0, []);
      Btmp.SaveToFile('c:\'+inttostr(i)+'.bmp');
      Btmp.Free;
    end;
...
Рейтинг: 0 / 0
Открыть PDF из MemoryStream
    #39780239
Volzok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Volzok, Вроде разобрался, сделал так, все заработало

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    
for i:=0 to PdfView.Pdf.PageCount-1 do
       begin
          Btmp:=TBitmap.Create;
          PdfView.Pdf.LoadPage(i);
          Paint;
          PdfView.SetSize;
          Btmp.Height:=PdfView.Height;
          Btmp.Width:=PdfView.Width;
          PdfView.Pdf.RenderPageDevice(Btmp.Canvas.Handle, PdfView.Pdf.Page ,0, 0,PdfView.Width, PdfView.Height, ro0, []);
          Btmp.SaveToFile('c:\bmp\'+inttostr(i)+'.bmp');
          Btmp.Free;
      end;
...
Рейтинг: 0 / 0
Открыть PDF из MemoryStream
    #39783057
Volzok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymxГаджимурадов Рустам https://github.com/ahausladen/PdfiumLib не подходит?не хватает знаний для портирования на Д7


Нашел данную бибилиотеку портированную на Delphi7, вроде все работает. Если ещё требуется прикладываю.
Активирую так. все работает, полосы прокрутки при необходимости появляются, при передачи фокуса scrollbox крутит вертикальный скроллб с нажатым Шифт - вертикальный, с Контролом - меняется масштаб
Код: pascal
1.
2.
3.
4.
5.
6.
  PdfView := TPdfControl.Create(nil);
  PdfView.SmoothScroll:=true;
  PdfView.Parent := ScrollBox;
  PdfView.Align:=alClient;
  ScrollBox.DoubleBuffered := false;
  PdfView.ScaleMode:=smZoom;


А вы не пробовали сами создавать PDF c помощью pdfium.dll?
У меня страницы создаются заданного размера, а вот наполнение страниц сделать не удается (текст, картинки bmp/jpg).
Вроде есть функция loadjpgfile, но не пойму как использовать.
...
Рейтинг: 0 / 0
Открыть PDF из MemoryStream
    #39783137
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Volzok,

я создавал PDF из битмапа так (использовался модуль vcl24NSPDFViewer)

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
function CreateSinglePageFromBitmap(const APDFFileName: string; APageWidth: Integer; ABitmap: TBitmap): Boolean;
type
  TPDFDocumentSaveOption = (dsoIncremental = 1, dsoNoIncremental = 2, dsoRemoveSecurity = 3);
const
  DEF_MAGICMULTIPLIER = 100.0 / 35.3;    // GRV possibly A4 format
var
  PDFBitmap: TPDFBitmap;
  PDFPageObject: TPDFPageObject;
  PDFDocument: TPDFDocument;
  PDFPage: TPDFPage;
  DocumentEngine: TPDFDocumentEngine;
  FirstScan: Pointer;
  FileStream: TFileStream;
  FileWrite: TPDFFileWriteEx;
  Bitmap: TBitmap;
  Delta: Double;
  LocalWidth: Double;
  LocalHeight: Double;

  procedure FlipVertical(ASource, ADest: TBitmap);   // GRV function needs to be checked
  var
    SourceRect, DestRect: TRect;
  begin
    ADest.PixelFormat := ASource.PixelFormat;
    ADest.SetSize(ASource.Width, ASource.Height);
    DestRect := Bounds(0, 0, ASource.Width, ASource.Height);
    SourceRect := Bounds(0, ASource.Height, ASource.Width, 0);
    ADest.Canvas.CopyRect(DestRect, ASource.Canvas, SourceRect)
  end;

begin
  Result := False;
  if (APageWidth > 0) and (ABitmap.PixelFormat = pf32bit) then
  begin
    DocumentEngine := TPDFDocumentEngine.Create;
    Bitmap := TBitmap.Create;
    FileStream := TFileStream.Create(APDFFileName, fmCreate or fmShareDenyWrite);
    with DocumentEngine do
      try
        if not Initialized or not CreateDocument then
          Exit;
        Delta := ABitmap.Width / ABitmap.Height;
        LocalWidth := APageWidth * DEF_MAGICMULTIPLIER;
        LocalHeight := LocalWidth / Delta;
        FlipVertical(ABitmap, Bitmap);
        PDFDocument := Document;
        with Functions do
        begin
          PDFPage := PageNew(PDFDocument, 0, LocalWidth, LocalHeight);
          PDFPageObject := NewImageObject(PDFDocument);
          FirstScan := Bitmap.ScanLine[Bitmap.Height - 1];
          PDFBitmap := BitmapCreateEx(Bitmap.Width, Bitmap.Height, 3, FirstScan, Bitmap.Width * 4);             // GRV possibly 4 is pf32bit
          ImageObjSetBitmap(@PDFPage, 1, PDFPageObject, PDFBitmap);
          if ImageObjSetMatrix(PDFPageObject, 1, 0, 0, 1, 0, 0) <> 0 then
          begin
            PageObjTransform(PDFPageObject, LocalWidth, 0, 0, LocalHeight, 0, 0);
            PageInsertObject(PDFPage, PDFPageObject);
            PageGenerateContent(PDFPage);
            with FileWrite do
            begin
              Inner.Version := 1;
              Inner.WriteBlock := @WriteBlockToStream;
              Stream := FileStream
            end;
            Result := SaveAsCopy(PDFDocument, @FileWrite, Ord(dsoRemoveSecurity)) <> 0
          end
        end
      finally
        FreeAndNil(DocumentEngine);
        FreeAndNil(Bitmap);
        FreeAndNil(FileStream)
      end
  end
end;
...
Рейтинг: 0 / 0
4 сообщений из 104, страница 5 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Открыть PDF из MemoryStream
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]