diff --git a/fxbarcode/cbc_pdf417i.cpp b/fxbarcode/cbc_pdf417i.cpp
index d2c7525..72a30d6 100644
--- a/fxbarcode/cbc_pdf417i.cpp
+++ b/fxbarcode/cbc_pdf417i.cpp
@@ -21,7 +21,7 @@
 
 #include "fxbarcode/cbc_pdf417i.h"
 
-#include <memory>
+#include <vector>
 
 #include "fxbarcode/pdf417/BC_PDF417Writer.h"
 #include "third_party/base/ptr_util.h"
@@ -35,11 +35,8 @@
   int32_t width;
   int32_t height;
   auto* pWriter = GetPDF417Writer();
-  std::unique_ptr<uint8_t, FxFreeDeleter> data(
-      pWriter->Encode(contents, &width, &height));
-  if (!data)
-    return false;
-  return pWriter->RenderResult(data.get(), width, height);
+  std::vector<uint8_t> data = pWriter->Encode(contents, &width, &height);
+  return !data.empty() && pWriter->RenderResult(data.data(), width, height);
 }
 
 bool CBC_PDF417I::RenderDevice(CFX_RenderDevice* device,
diff --git a/fxbarcode/pdf417/BC_PDF417Writer.cpp b/fxbarcode/pdf417/BC_PDF417Writer.cpp
index 423e8da..71509ff 100644
--- a/fxbarcode/pdf417/BC_PDF417Writer.cpp
+++ b/fxbarcode/pdf417/BC_PDF417Writer.cpp
@@ -29,6 +29,7 @@
 #include "fxbarcode/common/BC_CommonBitMatrix.h"
 #include "fxbarcode/pdf417/BC_PDF417.h"
 #include "fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h"
+#include "third_party/base/stl_util.h"
 
 CBC_PDF417Writer::CBC_PDF417Writer() : CBC_TwoDimWriter(false) {}
 
@@ -42,9 +43,10 @@
   return true;
 }
 
-uint8_t* CBC_PDF417Writer::Encode(const WideStringView& contents,
-                                  int32_t* pOutWidth,
-                                  int32_t* pOutHeight) {
+std::vector<uint8_t> CBC_PDF417Writer::Encode(const WideStringView& contents,
+                                              int32_t* pOutWidth,
+                                              int32_t* pOutHeight) {
+  std::vector<uint8_t> results;
   CBC_PDF417 encoder;
   int32_t col = (m_Width / m_ModuleWidth - 69) / 17;
   int32_t row = m_Height / (m_ModuleWidth * 20);
@@ -55,7 +57,7 @@
   else if (row >= 3 && row <= 90)
     encoder.setDimensions(30, 1, row, row);
   if (!encoder.GenerateBarcodeLogic(contents, error_correction_level()))
-    return nullptr;
+    return results;
 
   CBC_BarcodeMatrix* barcodeMatrix = encoder.getBarcodeMatrix();
   std::vector<uint8_t> matrixData = barcodeMatrix->toBitArray();
@@ -66,11 +68,11 @@
     RotateArray(&matrixData, matrixHeight, matrixWidth);
     std::swap(matrixWidth, matrixHeight);
   }
-  uint8_t* result = FX_Alloc2D(uint8_t, matrixHeight, matrixWidth);
-  memcpy(result, matrixData.data(), matrixHeight * matrixWidth);
   *pOutWidth = matrixWidth;
   *pOutHeight = matrixHeight;
-  return result;
+  results = pdfium::Vector2D<uint8_t>(*pOutWidth, *pOutHeight);
+  memcpy(results.data(), matrixData.data(), *pOutWidth * *pOutHeight);
+  return results;
 }
 
 void CBC_PDF417Writer::RotateArray(std::vector<uint8_t>* bitarray,
diff --git a/fxbarcode/pdf417/BC_PDF417Writer.h b/fxbarcode/pdf417/BC_PDF417Writer.h
index 632d273..c32508b 100644
--- a/fxbarcode/pdf417/BC_PDF417Writer.h
+++ b/fxbarcode/pdf417/BC_PDF417Writer.h
@@ -18,9 +18,9 @@
   CBC_PDF417Writer();
   ~CBC_PDF417Writer() override;
 
-  uint8_t* Encode(const WideStringView& contents,
-                  int32_t* pOutWidth,
-                  int32_t* pOutHeight);
+  std::vector<uint8_t> Encode(const WideStringView& contents,
+                              int32_t* pOutWidth,
+                              int32_t* pOutHeight);
 
   // CBC_TwoDimWriter
   bool SetErrorCorrectionLevel(int32_t level) override;
diff --git a/fxbarcode/pdf417/BC_PDF417Writer_unittest.cpp b/fxbarcode/pdf417/BC_PDF417Writer_unittest.cpp
index dd089d9..1c09d78 100644
--- a/fxbarcode/pdf417/BC_PDF417Writer_unittest.cpp
+++ b/fxbarcode/pdf417/BC_PDF417Writer_unittest.cpp
@@ -4,7 +4,7 @@
 
 #include "fxbarcode/pdf417/BC_PDF417Writer.h"
 
-#include <memory>
+#include <vector>
 
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -413,13 +413,12 @@
         1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1,
         0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1,
         1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1};
-    std::unique_ptr<uint8_t, FxFreeDeleter> data(
-        writer.Encode(L"", &width, &height));
-    ASSERT_TRUE(data);
+    std::vector<uint8_t> data = writer.Encode(L"", &width, &height);
+    ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedWidth, width);
     ASSERT_EQ(kExpectedHeight, height);
     for (size_t i = 0; i < FX_ArraySize(kExpectedData); ++i)
-      EXPECT_EQ(kExpectedData[i], data.get()[i]) << i;
+      EXPECT_EQ(kExpectedData[i], data[i]) << i;
   }
   {
     static constexpr int kExpectedWidth = 579;
@@ -811,12 +810,11 @@
         1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0,
         0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1,
         1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1};
-    std::unique_ptr<uint8_t, FxFreeDeleter> data(
-        writer.Encode(L"hello world", &width, &height));
-    ASSERT_TRUE(data);
+    std::vector<uint8_t> data = writer.Encode(L"hello world", &width, &height);
+    ASSERT_EQ(FX_ArraySize(kExpectedData), data.size());
     ASSERT_EQ(kExpectedWidth, width);
     ASSERT_EQ(kExpectedHeight, height);
     for (size_t i = 0; i < FX_ArraySize(kExpectedData); ++i)
-      EXPECT_EQ(kExpectedData[i], data.get()[i]) << i;
+      EXPECT_EQ(kExpectedData[i], data[i]) << i;
   }
 }
