Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.09.2016, 16:57
P.Makal P.Makal вне форума
Прохожий
 
Регистрация: 28.09.2016
Сообщения: 3
Версия Delphi: Delphi xe10
Репутация: 10
По умолчанию Вставка изображения в pdf файл на android

Добрый день, нужно вставить картинку из Image1 в pdf.
Использую java class
Вот код по созданию pdf и надписи hello world. Не получается с типами, так как у Image1 можно только Bitmap, а нужно JBitmap, или тогда надо каое то другое решение.
Код:
uses Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes,
Androidapi.JNI.Net, Androidapi.Helpers, System.IOUtils;


procedure TFormMain.ButtonCreatePdfClick(Sender: TObject);
var
Document: JPdfDocument;
PageInfo: JPdfDocument_PageInfo;
Page: JPdfDocument_Page;
Canvas: JCanvas;
Paint: JPaint;
Rect: JRectF;
FileName: string;
OutputStream: JFileOutputStream;
Intent: JIntent;
//image:JBitmap;
begin
// create Pdf document
Document := TJPdfDocument.JavaClass.init;
try
// create page 1
PageInfo := TJPageInfo_Builder.JavaClass.init(100, 100, 1).create;
Page := Document.startPage(PageInfo);

Canvas := Page.getCanvas;
Paint := TJPaint.JavaClass.init;
Paint.setARGB($FF, 0, 0, $FF);
Canvas.drawText(StringToJString('Hello, world!'), 10, 50, Paint);
Canvas.drawBitmap();
Document.finishPage(Page);
Ответить с цитированием
  #2  
Старый 29.09.2016, 04:24
DrimSDK DrimSDK вне форума
Прохожий
 
Регистрация: 16.08.2016
Сообщения: 5
Версия Delphi: RAD Studio XE6
Репутация: 10
По умолчанию

Можно попробовать конвертировать. У меня пока нет возможности испытать, но попробуйте оттолкнуться от этого:

Код:
uses FMX.Surfaces, FMX.Helpers.Android, FMX.Objects, Androidapi.JNI.GraphicsContentViewText;
...
procedure TFormMain.ButtonCreatePdfClick(Sender: TObject);
var
  Canvas: JCanvas;
  Paint: JPaint;
  mBitmap: JBitmap;
  Surface: TBitmapSurface;
begin
  ...
  Surface := TBitmapSurface.Create;
  Surface.Assign(Image1.Bitmap);
  SurfaceToJBitmap(Surface, mBitmap);
  Canvas.drawBitmap(mBitmap, 0, 0, Paint);
  Surface.Free;
  ...
end;
Ответить с цитированием
  #3  
Старый 29.09.2016, 11:40
P.Makal P.Makal вне форума
Прохожий
 
Регистрация: 28.09.2016
Сообщения: 3
Версия Delphi: Delphi xe10
Репутация: 10
По умолчанию

Все ок, только там не хватало одно модуля, я его дописал, но когда компилил, то появились не ошибки а предкпреждения, вот такие, честно говоря не знаю, что с ними делать
Изображения
Тип файла: png 2016-09-29 11.29.33.png (72.0 Кбайт, 9 просмотров)
Ответить с цитированием
  #4  
Старый 29.09.2016, 15:29
DrimSDK DrimSDK вне форума
Прохожий
 
Регистрация: 16.08.2016
Сообщения: 5
Версия Delphi: RAD Studio XE6
Репутация: 10
По умолчанию

Видимо, компилятор советует использовать TAndroidHelper.Activity вместо SharedActivity.
Кстати, а откуда тип JPdfDocument и подобное? Библиотека какая-то?

Последний раз редактировалось DrimSDK, 29.09.2016 в 15:32.
Ответить с цитированием
  #5  
Старый 29.09.2016, 18:17
P.Makal P.Makal вне форума
Прохожий
 
Регистрация: 28.09.2016
Сообщения: 3
Версия Delphi: Delphi xe10
Репутация: 10
По умолчанию

Смирился с тем и загрузил приложение на телефон, но вот такая ошибка:
java.lang.lllegal.StateException:Current page not finished!
Как я понимаю изображение не влезло в лист а4, но вроде оно не таких больших размеров.
Вот код конечный:
Код:
uses Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes,
  Androidapi.JNI.Net, Androidapi.Helpers, System.IOUtils,FMX.Surfaces,FMX.Helpers.Android,Androidapi.JNI.App;
procedure TFormMain.ButtonCreatePdfClick(Sender: TObject);
var
  Document: JPdfDocument;
  PageInfo: JPdfDocument_PageInfo;
  Page: JPdfDocument_Page;
  Canvas: JCanvas;
  Paint: JPaint;
  Rect: JRectF;
  FileName: string;
  OutputStream: JFileOutputStream;
  Intent: JIntent;
  mBitmap:JBitmap;
  Surface:TBitmapSurface;
begin
  // create Pdf document
  Document := TJPdfDocument.JavaClass.init;
  try
    // create page  1
    PageInfo := TJPageInfo_Builder.JavaClass.init(100, 100, 1).create;
    Page := Document.startPage(PageInfo);

    Canvas := Page.getCanvas;
    Paint := TJPaint.JavaClass.init;

    Paint.setARGB($FF, 0, 0, $FF);

    Surface.Assign(Image1.Bitmap);
    SurfaceToJBitmap(Surface, mBitmap);
    Canvas.drawBitmap(mBitmap,0,0,Paint);
    Surface.Free;

    Document.finishPage(Page);

    // create page 2
    PageInfo := TJPageInfo_Builder.JavaClass.init(100, 100, 2).create;
    Page := Document.startPage(PageInfo);

    Canvas := Page.getCanvas;
    Paint := TJPaint.JavaClass.init;

    Paint.setARGB($FF, $FF, 0, 0);
    Canvas.drawLine(10, 10, 90, 10, Paint);

    Paint.setStrokeWidth(1);
    Paint.setARGB($FF, 0, $FF, 0);
    Canvas.drawLine(10, 20, 90, 20, Paint);

    Paint.setStrokeWidth(2);
    Paint.setARGB($FF, 0, 0, $FF);
    Canvas.drawLine(10, 30, 90, 30, Paint);

    Paint.setARGB($FF, $FF, $FF, 0);
    Canvas.drawRect(10, 40, 90, 60, Paint);

    Rect := TJRectF.JavaClass.init;
    Rect.&set(10, 70, 90, 90);
    Paint.setARGB($FF, $FF, 0, $FF);
    Canvas.drawRoundRect(Rect, 5, 5, Paint);

    Document.finishPage(Page);

    // write PDF document to file
    FileName := TPath.GetSharedDocumentsPath + PathDelim + 'demo.pdf';
    OutputStream := TJFileOutputStream.JavaClass.init(StringToJString(FileName));
    try
      Document.writeTo(OutputStream);
    finally
      OutputStream.close;
    end;
  finally
    Document.close;
  end;

  // start PDF viewer
  Intent := TJIntent.JavaClass.init;
  Intent.setAction(TJIntent.JavaClass.ACTION_VIEW);
  Intent.setDataAndType(FileNameToUri(FileName), StringToJString('application/pdf'));
  Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NO_HISTORY or TJIntent.JavaClass.FLAG_ACTIVITY_CLEAR_TOP);
  SharedActivity.StartActivity(Intent);
end;
Вот это целый код.
Вторую страницу я накидал заранее для проверки. Она нормально идет
В чем ошибка. По вашему вопросу:Искал на форумах, чтобы можно было без компонентов, вот и нашёл на java
Ответить с цитированием
Ответ



Delphi 10.2 Tokyo

Delphi 10.2 Tokyo — самый быстрый способ создавать и обновлять интенсивно работающие с данными, распределенные и сильно взаимодействующие приложения с развитым и визуально привлекательным пользовательским интерфейсом для Windows 10, Mac, мобильных устройств, IoT и других платформ.


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:52.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2018

ВКонтакте   Facebook   Twitter