0

データベースからのデータを使用して pdf ドキュメントを生成する必要があります。たくさんの例を見てきましたが、このデータをデータベースから pdf に変換できませんでした。

Receipt と Logs (Receipt has_many Logs) の 2 つのモデルがあります。Receipt からデータを pdf に取得してから、Receipt に属するすべてのログをその pdf に取得します。その後、そのpdfドキュメントをAndroidデバイスから印刷する必要があります。

これが私のレシートモデルです。

@Table(name = "Receipt")
public class Receipt extends Model {
    @Column(name="Place")
    String place;
    @Column(name="ShippingNumber")
    String shippingNumber;
    @Column(name="Warehouse")
    String warehouse;
    @Column(name="Carrier")
    String carrier;
    @Column(name="LicencePlate")
    String licencePlate;
    @Column(name = "Driver")
    String driver;
    @Column(name = "Customer")
    String customer;
    @Column(name= "DestWarehouse")
    String destWarehouse;
    @Column(name = "Employee")
    String employee;
    @Column(name = "PriceType")
    String priceType;
    @Column(name = "PriceCorrection")
    Integer priceCorrection;
    @Column(name = "CreatedAt")
    Date createdAt;
    public List<Logs> getLogs(){
        return getMany(Logs.class,"Receipt");
  }

そして、これが私のログモデルです。

@Table(name = "Logs")
public class Logs extends Model {
        @Column(name="PlateNumber")
        String plate_number;
        @Column(name="SortID")
        String sort_id;
        @Column(name="Grade")
        String grade;
        @Column(name = "Diametar")
        double diameter;
        @Column(name="Length")
        double length;
        @Column(name="CreatedAt")
        Date createdAt;
        @Column(name="Receipt")
        Receipt receipt;
  }

レシートとログがどのように表示されているかを確認できるように、コードも貼り付けます。
これがログを表示する方法です。

 public LogsArrayAdapter(List<Logs> logsList) {
            inflater = LayoutInflater.from(DisplayLogs.this);
            this.logsList = logsList;
        }
        @Override
        public int getCount() {
            return logsList.size();
        }
        @Override
        public Object getItem(int position) {
            return logsList.get(position);
        }
        @Override
        public long getItemId(int position) {
            return logsList.get(position).getId();
        }
        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.activity_display_logs, parent, false);
            }
            Logs log = logsList.get(position);
            ((TextView) convertView.findViewById(R.id.textNumber)).setText(log.plate_number);
            ((TextView) convertView.findViewById(R.id.textSort)).setText(log.sort_id);
            ((TextView) convertView.findViewById(R.id.textGrade)).setText(log.grade);
            ((TextView) convertView.findViewById(R.id.textDiameter)).setText(log.diameter + "cm");
            ((TextView) convertView.findViewById(R.id.textLength)).setText(log.length + "cm");
            Log.d("Value", log.createdAt.toString());
            ((TextView) convertView.findViewById(R.id.textAmount)).setText(String.format("%.2f m3", log.getM3()));
            return convertView;
     }

そして、これが領収書を表示する方法です。

public ReceiptAdapter(List<Receipt> receiptList) {
            inflater = LayoutInflater.from(DisplayRecepit.this);
            this.receiptList = receiptList;
        }
        @Override
        public int getCount() {
            return receiptList.size();
        }
        @Override
        public Object getItem(int position) {
            return receiptList.get(position);
        }
        @Override
        public long getItemId(int position) {
            return receiptList.get(position).getId();
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = inflater.inflate(R.layout.activity_display_recepit, parent, false);
            }
            Receipt receipt = receiptList.get(position);
                ((TextView) convertView.findViewById(R.id.rPlace)).setText(receipt.place);
            ((TextView) convertView.findViewById(R.id.rShipNumb)).setText(receipt.shippingNumber);
            ((TextView) convertView.findViewById(R.id.rEmployee)).setText(receipt.employee);
            ((TextView) convertView.findViewById(R.id.rWarehouse)).setText(receipt.warehouse);
            ((TextView) convertView.findViewById(R.id.rCarrier)).setText(receipt.carrier);
            ((TextView) convertView.findViewById(R.id.rLicence)).setText(receipt.licencePlate);
            ((TextView) convertView.findViewById(R.id.rDriver)).setText(receipt.driver);
            ((TextView) convertView.findViewById(R.id.rCustomer)).setText(receipt.customer);
            ((TextView) convertView.findViewById(R.id.rDestWareh)).setText(receipt.destWarehouse);
                ((TextView) convertView.findViewById(R.id.rCreatedAt)).setText(new SimpleDateFormat("dd.MM.yyyy HH:mm").format(receipt.createdAt));
            return convertView;
 }

アドバイスやヘルプは大歓迎です。私は本当にこれに行き詰まっており、助けが必要です。

質問: データベースからのデータを使用して pdf ドキュメントを生成し、それを印刷するか、android printDocument() を使用してデータベースを直接操作する方が簡単ですか?
データベースからpdfDocumentまたはprintDocumentに変数を渡す方法は?

4

1 に答える 1